对象文本中的范围链
Scope chains in object literals
var x = 9;
var mod = {
x: 81,
assign: function(){
this.x = 9;
x = 3;
},
checkVars: function(){
alert(x + " - " + this.x );
}
};
mod.checkVars(); //9 - 81
mod.assign();
mod.checkVars(); //3 - 9
alert(x); //3
请解释作用域链如何在此处设置自己。为什么x
的范围解析checkVars
和assign
跳过对象mod
?
我为您的程序添加了一些注释:
var x = 9; // This is the *only* variable called x in your program
var mod = {
x: 81, // this x refers to a property of mod also called x
assign: function(){
this.x = 9; // "this" refers to the object mod, this.x is the x property of mod
x = 3; // x here refers to your variable called x
},
checkVars: function(){
alert(x + " - " + this.x ); // same as above
}
};
mod.checkVars(); //9 - 81
mod.assign();
mod.checkVars(); //3 - 9
alert(x); //3
换句话说,您的困惑与范围解析没有任何关系。 每当您引用 x
时,您都指的是您在程序顶部定义的名为x
的唯一变量。 每次引用 this.x
时,您都指的是在mod
对象文本上定义的名为x
的属性。
希望这有助于澄清事情!
变量和对象属性不是一回事。变量是作用域链的一部分,属性不是。assign
和checkVars
范围内的唯一变量是 x
和 mod
。 mod
的属性只能通过this.propName
(或mod.propName
(从这些方法中可见。
相关文章:
- Angular JS-文本框未在独立范围内更新
- 如何在JavaScript中获取文本区域的选定文本范围
- 对象内部函数内的对象文本的范围
- 如何按从当前单词到段落中该句子(.)结尾的范围选择文本
- 如何在 Chrome 的文本区域中“替换”选定的文本范围
- 根据输入范围更新显示的文本量
- 返回Javascript中给定正则表达式的文本范围数组
- 根据输入范围更新显示的文本量
- 如何使用javascript将文本框中的值限制为1-999之间的值范围
- 使用jQuery获取h4 class=“”的文本内容;ng结合”;超出Angular范围
- 如何允许用户在文本框中插入角度范围变量
- 使用jquery感知文本字符串中的时间范围
- 如何放置日期范围从周选择器用于两个文本输入
- 否则,无法使用 Jquery 更改范围内的文本
- 单击时更改范围文本
- “更改范围文本”按钮
- HTML范围文本切换
- 由范围文本控制的 Onclick 事件
- j查询或下划线 按范围文本对列表进行排序
- 使用jQuery从各自的值更新多个范围文本