Javascript 这是在声明一个变量-对吗?
我在博客上看到以下内容:Javascript 这是在声明一个变量-对吗?,javascript,variables,Javascript,Variables,我在博客上看到以下内容: for (var key in map) { if (map.hasOwnProperty(key)) { var value = map[key]; // right, now we can get some work done } } “现在您看到for循环顶部的var键了吗?那不是 声明一个变量,哦,不,它是说在其他地方有一个 名为“key”的变量 这肯定是在声明一个变量(如果范围链中以前不存在名为key的变量)?作者这是什么意思 链接:
for (var key in map) {
if (map.hasOwnProperty(key)) {
var value = map[key];
// right, now we can get some work done
}
}
“现在您看到for循环顶部的var键了吗?那不是
声明一个变量,哦,不,它是说在其他地方有一个
名为“key”的变量
这肯定是在声明一个变量(如果范围链中以前不存在名为key
的变量)?作者这是什么意思
链接:
这肯定是在声明一个变量(如果范围链中以前不存在一个命名键)
是的,它在for
循环所在的函数中。(变量是而不是限制在for
循环中,就像在Java中一样。它的作用域是它所在的整个函数。)
更多关于var
(在我的博客上):
作者这是什么意思
这听起来很讽刺,实际上,就像作者试图通过说与他们的意思相反的话来表达自己的观点
编辑既然您已经发布了链接,下面是完整的报价:
现在您看到var
键位于for
循环的顶部了吗?这并不是在声明一个变量,哦,不。它是说在其他地方有一个名为key
的变量(事实证明,它位于最近的包含函数的顶部)。哦,key
变量在该函数以及它包含的任何函数中都是可见的,而不仅仅是隐藏在for循环中。太棒了
他试图指出的一点是,变量不仅仅限于for
循环。但最初的说法是完全错误的。我知道他的意思,但不是他说的
关于上面的第一点,在ES6中,JavaScript将获得一个新关键字,let
,它将仅为for
循环声明一些内容:
// New in ES6, you probably can't use this yet
for (let key in map) {
// ^^^---------------- change is here
if (map.hasOwnProperty(key)) {
let value = map[key];
// ^^^----------------- probably want to change this one, too
// right, now we can get some work done
}
}
一些引擎已经支持它了,但你还不能像很多引擎那样广泛使用它。从理论上讲,ES6规范草案可能会改变,尽管我真的怀疑它会改变。:-)
这肯定是在声明一个变量(如果范围链中以前不存在一个命名键)
是的,它在for
循环所在的函数中。(变量是而不是限制在for
循环中,就像在Java中一样。它的作用域是它所在的整个函数。)
更多关于var
(在我的博客上):
作者这是什么意思
这听起来很讽刺,实际上,就像作者试图通过说与他们的意思相反的话来表达自己的观点
编辑既然您已经发布了链接,下面是完整的报价:
现在您看到var
键位于for
循环的顶部了吗?这并不是在声明一个变量,哦,不。它是说在其他地方有一个名为key
的变量(事实证明,它位于最近的包含函数的顶部)。哦,key
变量在该函数以及它包含的任何函数中都是可见的,而不仅仅是隐藏在for循环中。太棒了
他试图指出的一点是,变量不仅仅限于for
循环。但最初的说法是完全错误的。我知道他的意思,但不是他说的
关于上面的第一点,在ES6中,JavaScript将获得一个新关键字,let
,它将仅为for
循环声明一些内容:
// New in ES6, you probably can't use this yet
for (let key in map) {
// ^^^---------------- change is here
if (map.hasOwnProperty(key)) {
let value = map[key];
// ^^^----------------- probably want to change this one, too
// right, now we can get some work done
}
}
一些引擎已经支持它了,但你还不能像很多引擎那样广泛使用它。从理论上讲,ES6规范草案可能会改变,尽管我真的怀疑它会改变。:-) 这实际上是一个变量的完整定义,它来自于在变量映射的当前迭代中获取的迭代器值。这是一个声明+初始化
要理解迭代器的概念,您必须更深入地研究底层解释器代码,它支持循环每次迭代的键值
还有这句话:“现在你看到for循环顶部的var键了吗?这不是在声明变量,哦,不。这是说在其他地方有一个名为key的变量”听起来很愚蠢,没有解释任何事情,而且会造成混乱
我不会读这样的文章,因为这样的陈述表明作者并不真正了解JavaScript背后的真实世界——即C/C++甚至汇编,它在基本内存级别工作,在数据结构比简单数组更高级的情况下,使用称为迭代器的结构来支持循环值。这实际上是在变量映射的当前迭代中从迭代器值获取的变量的完整定义。这是一个声明+初始化
要理解迭代器的概念,您必须更深入地研究底层解释器代码,它支持循环每次迭代的键值
还有这句话:“现在你看到for循环顶部的var键了吗?这不是在声明变量,哦,不。这是说在其他地方有一个名为key的变量”听起来很愚蠢,没有解释任何事情,而且会造成混乱
我不会读这样的文章,因为这样的陈述表明作者并不真正了解JavaScript背后的真实世界——即C/C++甚至汇编,它在基本内存级别工作,在数据结构比简单数组更高级的情况下,使用称为迭代器的结构来支持循环值。您有相关文章的链接吗?你是对的,这是一个声明。你有相关帖子的链接吗?你说得对,这是一个声明。