• js基础


    变量对象的创建过程

    在同一执行上下文中,变量对象的创建过程
    将所有的函数声明放入变量对象中,如果属性已存在,则被新的覆盖
    将所有的变量声明放入变量对象中,如果属性已存在,为了防止同名的函数被修改为undefined,
    则会直接跳过,原属性值不会被修改,然后开始执行阶段代码的执行


    this
    在一个函数的作用域中,this由调用者提供,由调用函数的方式来决定,如果调用者函数,被某一个函数所拥有,那么该函数在调用时,
    内部的this指向该对象,如果函数独立调用,那么该函数内部的this,则指向undefined,但是在非严格模式下,当this指向undefined时,
    它被自动指向全局对象.

    通过new操作符调用构造函数,会经历以下4个阶段
    1.创建一个新的对象
    2.将构造函数的this指向这个新对象
    3.指向构造函数的代码,为这个对象添加属性,方法等
    4.返回新对象
    因此,当new操作符调用构造函数时,this其实指向的是新创建的对象
    最后又将新的对象返回出来,被实例对象p1接收.因此,我们可以说,
    这个时候,构造函数的this,指向了新的实例对象,p1

    断点调试
    函数在被调用执行时,会创建一个当前函数的执行上下文,在执行上下文的创建阶段
    变量对象,作用域链,闭包,this指向会分别被确定.而一个javascript程序中一般来说
    会有多个函数,javascript引擎使用函数调用栈管理这些函数的调用顺序.函数调用栈的
    调用顺序与栈数据结构一致

    闭包:
    1.在函数内部创建新的函数
    2.新的函数在执行时,访问了函数的变量对象

    闭包是指这样的作用域(foo),它包含有一个函数(fn1),
    这个函数(fn1)可以调用被这个作用域所封闭的变量(a)、函数、或者闭包等内容。
    通常我们通过闭包所对应的函数来获得对闭包的访问。

    1.闭包是在函数被调用执行的时候才被确确认创建的
    2.闭包的形成,与作用域的访问顺序有直接关系
    3.只有内部函数访问了上层作用域链中的变量对象时,才会形成闭包,因此,
    我们可以利用闭包来访问函数内部的变量

    函数与函数式编程
    一:函数声明,函数表达式,匿名函数与自执行函数
    在js中,有两种声明方式,一个是使用var的变量声明,一个是使用function的函数声明
    变量对象在创建过程中,函数声明具有优先的执行顺序,即函数声明提前,因此我们再执行上下文中
    无论在什么位置声明了函数,我们都可以在同一个执行上下文中直接使用该函数

    js的隐式全局变量和显示全局变量

           var a = 10;
                console.log(window)
                function fn(){
                    return a1=2
                }
                fn()
                delete a
                delete a1
                console.log(window)

    上例,a 是 var声明的全局变量,a1是函数返回的隐式的全局变量,

    使用delete操作符,变量a未被删除,a1被删除。

    构造函数 ,实例,原型

    我们创建的每一个函数,都可以有一个prototype属性,该属性指向一个对象。这个对象,就是我们这里说的原型。
    当我们在创建对象时,可以根据自己的需求,选择性的将一些属性和方法通过prototype属性,挂载在原型对象上。
    而每一个new出来的实例,都有一个__proto__属性,该属性指向构造函数的原型对象,通过这个属性,
    让实例对象也能够访问原型对象上的方法。因此,当所有的实例都能够通过__proto__访问到原型对象时,
    原型对象的方法与属性就变成了共有方法与属性。

    function Fn(){}//构造函数
    var a = new Fn(); //实例对象
    console.log(Fn.prototype) // 原型对象
    console.log(a.__proto__) //实例通过指针找到原型
    console.log(a instanceof Fn) //true a是构造函数Fn的实例
    console.log(Object.getPrototypeOf(a)) // 返回实例对象a的原型对象
  • 相关阅读:
    【J2me3D系列学习文章之一】J2me3D开发技术和基础知识
    使用NSOperation实现异步下载
    如何在iphone应用程序中发送短信
    【J2me3D系列学习文章之二】(立即模式)构造我们3D世界中的第一个立方体!
    下拉列表框实现
    Android开发:在EditText中关闭软键盘
    ContentLength为-1导致下载文件字节数为0错误
    前端要给力之:代码可以有多烂?
    NSOperation与performSelectorOnMainThread
    WebService 接口调用指南
  • 原文地址:https://www.cnblogs.com/xumqfaith/p/9133168.html
Copyright © 2020-2023  润新知