在 javascript 中关闭词法范围
switch off lexical scoping in javascript
是否可以更改 javascript 的词法范围,以便函数使用在调用时而不是在定义时有效的变量范围?简而言之,我可以更改与函数关联的作用域链吗?
举个例子:
我希望能够执行类似这样的操作而不会收到错误消息,即 y 未定义:
function f(){y+2};
function g(){
var y=2;
f();
return y;
}
g();
您的问题可能是对您的问题有误解。 y
未在 f()
的功能范围内定义,您永远不会为其赋值。 g()
中的 y
作用域为该函数。
在你的例子中:
function f(){ y+2 };
function g(){
var y=2;
f();
return y;
}
g();
如果g()
使用全局y
,那么f()
中的y
将在运行时定义。在 g()
中删除 var
关键字以在编译时创建全局 y
。
function f(){ y+2 };
function g(){
y=2;
f();
return y;
}
g();
注意: 可以像这样创建全局范围的变量,但 不 推荐。由于您的示例是人为设计的,仅用于理解范围,因此不会造成任何伤害。
是否可以更改 javascript 的词法范围,以便函数使用在调用时而不是在定义时有效的变量范围?简而言之,我可以更改与函数关联的作用域链吗?
举个例子: 我希望能够执行类似这样的操作而不会收到错误消息,即 y 未定义:
function f(){y+2};
function g(){
var y=2;
f();
return y;
}
g();
您的问题可能是对您的问题有误解。 y
未在 f()
的功能范围内定义,您永远不会为其赋值。 g()
中的 y
作用域为该函数。
在你的例子中:
function f(){ y+2 };
function g(){
var y=2;
f();
return y;
}
g();
如果g()
使用全局y
,那么f()
中的y
将在运行时定义。在 g()
中删除 var
关键字以在编译时创建全局 y
。
function f(){ y+2 };
function g(){
y=2;
f();
return y;
}
g();
注意: 可以像这样创建全局范围的变量,但 不 推荐。由于您的示例是人为设计的,仅用于理解范围,因此不会造成任何伤害。