JS中为什么object中,this指向window?

JavaScript015

JS中为什么object中,this指向window?,第1张

刚开始学,很容易对javascript中的this搞得晕头转向,因为它指向谁,取决于它所在的地方。

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

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

在函数中,this 表示全局对象,在严格模式下,this 是未定义的(undefined)。

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

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

你这个例子里就属于单独使用,所以这里的this代表的是全局对象,浏览器环境下就说window了。

把你的例子稍微改一下:

var obj = {

a: 20,

b: function(){ return this.a+= 10 }

}

这时候执行 obj.b(),就发现这里的this指向的是obj了,也就算上述的第一条。关于this的指向要多练习,多思考,因为它确实乱糟糟,所以在ES6中出现了箭头函数,缓解了这个噩梦。

严格模式是一种将更好的错误检查引入代码中的方法。 在使用严格模式时,无法使用隐式声明的变量、将值赋给只读属性或将属性添加到不可扩展的对象等

1、  严格模式的目的

1) 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为

2)消除代码运行的一些不安全之处,保证代码运行的安全

3) 提高编译器效率,增加运行速度

4) 为未来新版本的Javascript做好铺垫

 2、声明严格模式

可以通过在文件、程序或函数的开头添加 "use strict" 来声明严格模式。 此类声明称作“指令序言”。 严格模式声明的范围取决于其上下文。 如果在全局上下文(函数的范围之外)中声明严格模式,则程序中的所有代码都处于严格模式。如果在函数中声明严格模式,则函数中的所有代码都处于严格模式。

例如,在以下示例中,所有代码都处于严格模式,并且函数外部的变量声明会导致出现语法错误“严格模式下未定义变量”

"use strict"

function testFunction(){

    var testvar = 4

    return testvar

}

// This causes a syntax error.

testvar = 5

在以下示例中,仅 testFunction 中的代码处于严格模式。 函数外部的变量声明不会导致语法错误,但函数内部的声明会导致语法错误

function testFunction(){

    "use strict"

    // This causes a syntax error.

    testvar = 4

    return testvar

}

testvar = 5