javascript参数和范围

标签 javascript function scope

对这个 Eloquent Javascript 有点困惑 explanation参数和范围。

它声明在函数外部声明的变量是全局变量,在函数内部声明的变量是局部变量,在函数内部声明的没有前置 var 的变量本质上是引用一个类似命名的全局变量.美好的。这就说得通了。但是这段代码让我陷入了循环。

var x = "outside";

var f1 = function() {
  var x = "inside f1";
};
f1();
console.log(x);
// → outside

var f2 = function() {
  x = "inside f2";
};
f2();
console.log(x);
// → inside f2

在第一个函数中注销 x 的值应该导致“inside f1”,因为该变量是在本地声明的。第二个函数(因为它包含一个没有声明的变量 var,因此引用了在最顶部声明​​的全局变量)应该导致“外部”。但是……这两种情况都不是。

我明白了应该发生的事情的要点。但除非我读错了,否则它似乎与作者描述的相反。这不可能是错别字。

最佳答案

f1 中的 x 是一个新变量只能在 f1 中访问并且对第一个没有影响, 全局 x。为了清楚起见,您问题中的示例代码基本上可以像下面这样编写:

    var globalX = "outside";
    var f1 = function() {
      var localF1X = "inside f1";
    };
    f1();
    console.log(globalX); // → outside

    var f2 = function() {
      globalX = "inside f2";
    };
    f2();
    console.log(globalX); // → inside f2

关于javascript参数和范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29998219/

相关文章:

function - 获取 .ps1 文件中特定函数的最后一行

.net - 我应该在线程启动后保留对线程的引用吗?

ios - 将现有函数作为参数传递给 Swift 3 中的另一个函数

javascript - meteor js 中 window.onload(function(){}) 和 $(document).ready(function(){}) 在 jQuery 中的等效函数是什么?

javascript - $.mustache() 已定义,但在调用 mustache() 时未定义 Mustache()

javascript - JavaScript 中意外的数值行为

C++,函数参数的多态性与模板化

Ruby:在让出过程中,谁是 block 内的 self?

javascript - 隔离指令范围但保留对 ngModel 的绑定(bind)

javascript - javascript函数中的单引号?