JavaScript名称空间和这个/那个范围
我正在处理一些应用程序的名称空间,我不理解名称空间中的作用域JavaScript名称空间和这个/那个范围,javascript,Javascript,我正在处理一些应用程序的名称空间,我不理解名称空间中的作用域 (function (App) { App.Test = function(props){ var that = this; var letter = "A"; function init(){ console.log("Round 1 ::::::::::::::::::::"); console.log(" lett
(function (App) {
App.Test = function(props){
var that = this;
var letter = "A";
function init(){
console.log("Round 1 ::::::::::::::::::::");
console.log(" letter:",letter);
console.log("that.letter:",that.letter);
letter = "B";
that.letter = "C";
console.log("Round 2 ::::::::::::::::::::");
console.log(" letter:",letter);
console.log("that.letter:",that.letter);
}
function logLetters(){
}
this.letter = letter;
init();
};
})(window.App = window.App || {});
var app = new App.Test();
console.log("Round 3 ::::::::::::::::::::");
console.log(" app.letter:",app.letter);
输出
Round 1 ::::::::::::::::::::
letter: A
that.letter: A
Round 2 ::::::::::::::::::::
letter: B
that.letter: C
Round 3 ::::::::::::::::::::
app.letter: C
在第二轮中,为什么不(字母===that.letter)
当我更新那封信时,letter
为什么不更新,反之亦然
如果我想“公开”的话,我需要用这个来声明吗
this.letter = "A";
JavaScript是。这意味着变量或属性将始终包含一个值,但永远不会包含对变量的引用。也就是说,为变量或属性分配新值不会改变另一个变量或属性的值(例外情况是全局范围和带
范围,其中变量绑定连接到对象)
例如:
var foo = 42;
var bar = foo;
foo = 21;
console.log(bar); // 42
bar
没有对foo
的引用。相反,foo
的值被复制到bar
。因此,以后更改foo
或bar
不会影响其他变量
将其与PHP进行比较,在PHP中,我们可以通过使用特殊运算符实际分配变量:
$foo = 42;
$bar = &$foo;
$foo = 21;
echo $bar; // 21
适用于您的示例: 当您执行
that.letter=letter
时,您正在将letter
的值复制到that.letter
。现在两个绑定具有相同的值
稍后当您分配letter=“B”
和那封信代码>,您正在为变量和属性指定新值,现在它们具有不同的值
我可能在你的问题中遗漏了一些东西,但我看不出这个问题与这个或者名称空间有什么关系。这意味着变量或属性将始终包含一个值,但永远不会包含对变量的引用。也就是说,为变量或属性分配新值不会改变另一个变量或属性的值(例外情况是全局范围和带
范围,其中变量绑定连接到对象)
例如:
var foo = 42;
var bar = foo;
foo = 21;
console.log(bar); // 42
bar
没有对foo
的引用。相反,foo
的值被复制到bar
。因此,以后更改foo
或bar
不会影响其他变量
将其与PHP进行比较,在PHP中,我们可以通过使用特殊运算符实际分配变量:
$foo = 42;
$bar = &$foo;
$foo = 21;
echo $bar; // 21
适用于您的示例:
当您执行that.letter=letter
时,您正在将letter
的值复制到that.letter
。现在两个绑定具有相同的值
稍后当您分配letter=“B”
和那封信代码>,您正在为变量和属性指定新值,现在它们具有不同的值
我可能在你的问题中遗漏了一些东西,但我看不出这个问题与这个或者名称空间有什么关系。这意味着变量或属性将始终包含一个值,但永远不会包含对变量的引用。也就是说,为变量或属性分配新值不会改变另一个变量或属性的值(例外情况是全局范围和带
范围,其中变量绑定连接到对象)
例如:
var foo = 42;
var bar = foo;
foo = 21;
console.log(bar); // 42
bar
没有对foo
的引用。相反,foo
的值被复制到bar
。因此,以后更改foo
或bar
不会影响其他变量
将其与PHP进行比较,在PHP中,我们可以通过使用特殊运算符实际分配变量:
$foo = 42;
$bar = &$foo;
$foo = 21;
echo $bar; // 21
适用于您的示例:
当您执行that.letter=letter
时,您正在将letter
的值复制到that.letter
。现在两个绑定具有相同的值
稍后当您分配letter=“B”
和那封信代码>,您正在为变量和属性指定新值,现在它们具有不同的值
我可能在你的问题中遗漏了一些东西,但我看不出这个问题与这个或者名称空间有什么关系。这意味着变量或属性将始终包含一个值,但永远不会包含对变量的引用。也就是说,为变量或属性分配新值不会改变另一个变量或属性的值(例外情况是全局范围和带
范围,其中变量绑定连接到对象)
例如:
var foo = 42;
var bar = foo;
foo = 21;
console.log(bar); // 42
bar
没有对foo
的引用。相反,foo
的值被复制到bar
。因此,以后更改foo
或bar
不会影响其他变量
将其与PHP进行比较,在PHP中,我们可以通过使用特殊运算符实际分配变量:
$foo = 42;
$bar = &$foo;
$foo = 21;
echo $bar; // 21
适用于您的示例:
当您执行that.letter=letter
时,您正在将letter
的值复制到that.letter
。现在两个绑定具有相同的值
稍后当您分配letter=“B”
和那封信代码>,您正在为变量和属性指定新值,现在它们具有不同的值
我可能在你的问题中遗漏了一些东西,但我看不出这个问题与这个或名称空间有什么关系。在JavaScript中,原语(如数字)是按值传递的。除此之外,letter
属性与本地letter
变量无关。在JavaScript中,原语(如数字)按值传递。除此之外,letter
属性与本地letter
变量无关。在JavaScript中,原语(如数字)按值传递。除此之外,letter
属性与本地letter
变量无关