-1
(function() {

    var sample = "sample1";

    (function() {

        // set sample variable 
        sample = "sample2";

        (function() {

            // set sample variable
            sample = "sample3";
        }());
    }());



    console.log(sample); // "sample3"
}());

所以; 样本名称@variable console.log 结果“sample3”;我如何获得第一个变量?“样品1”??

console.log(sample); // --> "sample1" ?? 

谢谢你。

4

3 回答 3

2

声明你的变量而不是分配给外部变量?

var sample = "sample2";

还有,为什么

于 2012-09-29T15:16:30.300 回答
2

赋值会更改您存储在变量中的值。无法恢复旧值。

引用变量

每当你引用一个变量——读取或写入它,即——JavaScript 将沿着作用域 向上移动,直到找到该名称的变量,否则它将在最顶层的作用域中创建它:window,即全局作用域。

声明变量

var在当前范围内声明一个新变量。如果您要将每个分配添加到samplewith var,则变量会影响外部变量。为什么?让我们回想一下,当您引用变量时,JavaScript 会沿着作用域链向上传播。显然,它会首先在嵌套作用域中找到那些,阻止它在父作用域中进一步查找。

你的代码本质上是做什么的

请记住,当您引用变量时会发生什么,我们可以将您的代码转换为此,这在语义上是等效的(即,这正是您的代码所做的):

var sample = "sample1";
sample = "sample2";
sample = "sample3";
console.log(sample);

显然,它会被打印出来sample3,你不能神奇地让旧值重新出现。

于 2012-09-29T15:27:45.220 回答
1

您可以在每个范围内声明一个自sample变量:

(function() {

    var sample = "sample1";

    (function() {

        // set sample variable 
        var sample = "sample2";

        (function() {

            // set sample variable
           var sample = "sample3";
        }());
    }());

console.log(sample); // "sample1"
}());

在这里试试。

于 2012-09-29T15:50:35.393 回答