访问函数

时间:2015-09-21 06:52:15

标签: javascript scope

我正在尝试了解Javascript中的变量范围,一位朋友问我这个问题。我可以在这里使用一些帮助。

function abc(){
  var a = b = 10; // a is local, b is global variable. Right?
  c = 5; // c is global variable
}
d = 20; // d is global variable

console.log(b); // b is not defined error. Why? Isn't b a global variable?
console.log(c); // Again, Why is 'c not defined'.

我在chrome控制台中运行了这段代码。我不应该期待10和5在控制台?它给出'b未定义','c未定义'错误。如果b,c是全局变量,为什么会发生这种情况呢? console.log(d)工作正常。

这是fiddle

2 个答案:

答案 0 :(得分:4)

  

如果bc是全局变量,为什么会这样?

bc仅在您实际致电 abc时创建。仅仅定义该函数并不会神奇地执行它的正文。

function abc(){
  var a = b = 10; // a is local, b is global variable.
  c = 5; // c is global variable
}

// call abc to execute the statements inside the function
abc();

console.log(b); // 10
console.log(c); // 5

也就是说,隐含地创建全局变量仍然不好。尽可能避免使用全局变量,如果不是,则通过分配给全局对象(浏览器中为window)显式声明它们。

答案 1 :(得分:1)

  

编辑:这就是为什么我喜欢这样,即使你知道这一切,你也会学到一些知识并回答你明显没有装备的问题   回答。感谢@ FelixKling的澄清,我已更新此内容以反映var s

所以这里有一些术语混淆:

Javascript具有功能级别范围abfunction块内声明,它们是function的本地{}在function的范围内声明并受其限制。

一个函数(或window对象上的浏览器,global对象中的节点)中定义的变量,具有global范围。< / p>

因此var关键字实际上与global范围无关,范围由声明变量的位置定义。

举个例子:

function abc(){
  var a = b = 10; //a is local, b is global (see @FelixKling's answer)
  c = 5; // c is global as it is not prefixed with the `var` keyword 
}
var d = 20; // d is global 


console.log(a); // logs "10" to the console
console.log(b); // b is not defined
console.log(c); // 'c not defined'.
console.log(d); // logs 20 to the console.