Javascript 获取can';t读取属性';任何';在严格模式下编写脚本时出现类型错误

Javascript 获取can';t读取属性';任何';在严格模式下编写脚本时出现类型错误,javascript,this,strict-mode,Javascript,This,Strict Mode,当使用严格模式时我得到类型错误以使用此访问var “严格使用”; var bar=“全局”; 函数foo(){ console.log(this.bar); } 变量obj1={ 条:“obj1”, 福:福 }; 变量obj2={ 条形图:“obj2” }; foo(); obj1.foo(); foo.call(obj2); 新foo()在严格模式下,当您调用函数而不设置其this时,this是未定义的,而不是对全局对象的引用。这是严格模式的最大区别之一。因此,如果要使用对全局对象的引用调用

当使用
严格模式时
我得到
类型错误
以使用
访问
var

“严格使用”;
var bar=“全局”;
函数foo(){
console.log(this.bar);
}
变量obj1={
条:“obj1”,
福:福
};
变量obj2={
条形图:“obj2”
};
foo();
obj1.foo();
foo.call(obj2);

新foo()在严格模式下,当您调用函数而不设置其
this
时,
this
未定义的
,而不是对全局对象的引用。这是严格模式的最大区别之一。因此,如果要使用对全局对象的引用调用
foo
,您可以:

  • 在全局范围内,执行
    foo.call(this)(因为全局范围内的此
    是对全局对象的引用),或

  • 在浏览器上,执行
    foo.call(窗口)(因为
    窗口
    是全局对象上的一个属性,它用来指向自身——其他环境也可能有其他类似的全局对象)

  • 下面是#1的一个例子:

    “严格使用”;
    var bar=“全局”;
    函数foo(){
    console.log(this.bar);
    }
    变量obj1={
    条:“obj1”,
    福:福
    };
    变量obj2={
    条形图:“obj2”
    };
    
    foo.叫(这个);// 在严格模式下,当您调用函数而不进行任何设置其
    this
    时,
    this
    未定义的
    ,而不是对全局对象的引用。这是严格模式的最大区别之一。因此,如果要使用对全局对象的引用调用
    foo
    ,您可以:

  • 在全局范围内,执行
    foo.call(this)(因为全局范围内的此
    是对全局对象的引用),或

  • 在浏览器上,执行
    foo.call(窗口)(因为
    窗口
    是全局对象上的一个属性,它用来指向自身——其他环境也可能有其他类似的全局对象)

  • 下面是#1的一个例子:

    “严格使用”;
    var bar=“全局”;
    函数foo(){
    console.log(this.bar);
    }
    变量obj1={
    条:“obj1”,
    福:福
    };
    变量obj2={
    条形图:“obj2”
    };
    foo.叫(这个);//
    “this”指函数foo的范围。
    您可以键入其中的范围暗示为全局范围的窗口的条形图。也可以键入window.bar

    function foo() {
       console.log(window.bar);
       console.log(bar);
    }
    
    “this”指函数foo的范围。 您可以键入其中的范围暗示为全局范围的窗口的条形图。也可以键入window.bar

    function foo() {
       console.log(window.bar);
       console.log(bar);
    }
    
    可能重复的可能重复的“'this'指的是函数foo的范围”不,它不是。一点也不。”“this”指的是函数foo的范围“不,它不是。一点也不。