javascript是否实现词法作用域
Does javascript implement lexical scoping?
为什么返回2而不是1?第二个"var"似乎被忽略了。
function foo()
{
var local = 1;
{
var local = 2;
}
return local;
}
foo()
/*
2
*/
这就是你的代码最终的
function foo()
{
var local = 1;
local = 2;
return local;
}
foo();
在ES6中,您可以在Let的帮助下创建块级作用域。ES6还不受支持。更多关于这里
来自MDN:
JavaScript没有块语句作用域;更确切地说,是一个变量在块中声明的是函数的局部(或全局范围)块所在的。
JavaScript中变量的作用域是声明它的整个函数(或全局作用域),因此这里只有一个变量local
。
你的代码相当于
function foo()
{
var local;
local = 1;
{
local = 2;
}
return local;
}
foo()
请注意,ES6(JavaScript的新规范)确实引入了let
的词法范围,但它还没有真正可用。
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 将作用域存储在JSON中
- 从控制器继承了隔离的作用域以生成可重用的指令
- 从ng模板访问作用域
- 调用私有作用域
- 对父作用域的指令更新延迟了一步
- 正在$rootScope上达到控制器作用域$在内部控制器上
- JavaScript/循环混淆中的动态作用域与词法作用域
- 函数表达式的词法作用域
- javascript是否实现词法作用域
- javascript函数中的词法作用域,为什么代码返回undefined ?
- javascript函数中的词法作用域
- JavaScript词法作用域和变量的生命周期
- 词法作用域变量在getJSON调用中被覆盖后仍保留其值
- Typescript -词法作用域的问题=>这一点
- 我是否应该保留等于$q.defer()的变量,使其具有词法作用域?
- 全球.Eval不能访问词法作用域中的变量.行为是否符合ECMAScript标准
- 词法作用域概念在JavaScript中的确切含义是什么?
- 在chrome开发工具中调试带有词法作用域(闭包)的angularjs指令时的奇怪行为
- javascript中的词法作用域