据我了解,定义变量后,它会通过 this
附加到“最近的”本地范围。
如果没有在本地设置范围,则最近的范围变为window
。
然而,在严格模式中,本地范围被设置为未定义而不是window
,as part of the ECMAscript 5 spec designed to limit misuse of the global scope.
使用 immediately invoked function expression pattern以及创建 jQuery 插件的严格模式
;( function( $, window ){
"use strict";
var myScope = this;
var myVar = 1;
var myFunction = function(){
console.log( myScope, myVar );
}
$.myFunc = myFunction;
})( jQuery, window );
本地范围(上下文)未创建(通过函数调用),因此设置为未定义。
如果局部作用域未定义且 window.myVar
未定义,变量 myVar
的作用域是什么?如何访问它?
最佳答案
this context variable
就 ECMAscript 如何在底层实现词法作用域而言,与作用域没有任何关系。
this
将始终引用调用对象,它可以在运行时更改,而范围/上下文 不能更改。那里有两个函数调用,每个调用都有自己的执行上下文和激活对象,分别是词法环境记录,它们由存储任何本地数据的实现,例如形式参数、变量和函数声明。
您实际上要在这里实现的是创建一个散列/命名空间对象,用作保存数据的容器。因此,您不应分配 this
,但只需创建您自己的对象。
var myScope = { }; // respectively Object.create( null );
在严格模式中,实现只会设置this
至 undefined
对于任何按原样调用的函数。这意味着 this
的值由如何函数被调用决定。在您的情况下,它是一个自执行函数,因此它是 this
永远是undefined
在严格模式和window
(全局)非严格模式。
关于javascript - 在严格模式下函数表达式中定义的变量的范围是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14417928/