Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript名称空间和这个/那个范围_Javascript - Fatal编程技术网

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
变量无关