听js分享会后认识和总结

2021-07-31  本文已影响0人  何治国

一.javascript作用域:

在 JavaScript 中, 对象和函数同样也是变量。

在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。

JavaScript 函数作用域: 作用域在函数内修改。

1.javascript的局部作用域:

变量在函数内声明,变量为局部作用域。

局部变量:只能在函数内部访问。

因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。

局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁

2.JavaScript 全局变量

变量在函数外定义,即为全局变量。

全局变量有 全局作用域: 网页中所有脚本和函数均可使用。

如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。

3.JavaScript 变量生命周期

JavaScript 变量生命周期在它声明时初始化。

局部变量在函数执行完毕后销毁。

全局变量在页面关闭后销毁。

4.函数参数

函数参数只在函数内起作用,是局部变量。

5.HTML 中的全局变量

在 HTML 中, 全局变量是 window 对象: 所有数据变量都属于 window 对象。

你的全局变量,或者函数,可以覆盖 window 对象的变量或者函数。

局部变量,包括 window 对象可以覆盖全局变量和函数。

二.JavaScript this 关键字

面向对象语言中 this 表示当前对象的一个引用。

但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。

        在方法中,this 表示该方法所属的对象。

        如果单独使用,this 表示全局对象。

        在函数中,this 表示全局对象。

        在函数中,在严格模式下,this 是未定义的(undefined)。

       在事件中,this 表示接收事件的元素。

        类似 call() 和 apply() 方法可以将 this 引用到任何对象。

1.方法中的 this

在对象方法中, this 指向调用它所在方法的对象。

在上面一个实例中,this 表示 person 对象。

fullName 方法所属的对象就是 person。

2.单独使用 this

单独使用 this,则它指向全局(Global)对象。

在浏览器中,window 就是该全局对象为 [object Window]:

严格模式下,如果单独使用,this 也是指向全局(Global)对象。(严格模式是采用具有限制性JavaScript变体的一种方式,从而使代码显示地 脱离“马虎模式/稀松模式/懒散模式“(sloppy)模式。)

3.事件中的 this

在 HTML 事件句柄中,this 指向了接收事件的 HTML 元素:

总结: this 的多种指向:

 1、在对象方法中, this 指向调用它所在方法的对象。

 2、单独使用 this,它指向全局(Global)对象。

 3、函数使用中,this 指向函数的所属者。

 4、严格模式下函数是没有绑定到 this 上,这时候 this 是 undefined。

 5、在 HTML 事件句柄中,this 指向了接收事件的 HTML 元素。

 6、apply 和 call 允许切换函数执行的上下文环境(context),即 this 绑定的对象,可以将 this 引用到任何对象

三.JavaScript 变量提升

JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。

JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。

变量提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。

    1.JavaScript 初始化不会提升

        JavaScript 只有声明的变量会提升,初始化的不会。

        以下两个实例结果结果不相同:

        var x = 5; // 初始化 x

        elem = document.getElementById("demo"); // 查找元素

        elem.innerHTML = "x 为:" + x + ",y 为:" + y;          // 显示 x 和 y

        var y = 7; // 初始化 y

        实例的 y 输出了 undefined,这是因为变量声明 (var y) 提升了,但是初始化(y = 7) 并不会提升,所以 y                  变量 是一个未定义的变量。

   2.在头部声明你的变量

        对于大多数程序员来说并不知道 JavaScript 变量提升。

        如果程序员不能很好的理解变量提升,他们写的程序就容易出现一些问题。

        为了避免这些问题,通常我们在每个作用域开始前声明这些变量,这也是正常的 JavaScript 解析步骤,易于我们理解。

        

            

上一篇 下一篇

猜你喜欢

热点阅读