如果我在python代码下运行,
def f():
return bar
foo = f
foo()
bar = 3
foo()
as python file.py
然后此代码将在python解释器的__main__
模块的范围内。
在类似的方面,我想知道,以下JavaScript代码的范围是什么?
var foo = function(){
return bar;
};
foo();
var bar = 3;
foo();
JavaScript代码加载为类似于python解释器环境的模块吗?
答案 0 :(得分:1)
以下JavaScript代码的范围是什么?
这取决于环境。
对于客户端JavaScript,代码段将直接在全局范围内执行,使全局对象的foo
和bar
全局和属性window
。
var foo = 'bar';
console.log('foo' in window); // true
console.log(window.foo, foo); // 'bar' 'bar'
尽管如此,其他环境已经实现了模块规范,例如来自CommonJS的规范,并且可以定义每个脚本文件都有自己的范围。
var foo = 'bar';
console.log('foo' in global); // false
exports.foo = foo; // make available to other modules
答案 1 :(得分:0)
使用Javascripts variable hosting
,您的代码将以这样的方式执行:
var bar;
var foo;
foo = function(){
return bar;
};
foo();
bar = 3;
foo();
并且,如上所述,这将全局范围内运行,在全局级别创建变量foo
和bar
。