JavaScript变量作用域

admin 发布于:2015-11-12 17:10 栏目: 浏览:581 评论:0

当你声明一个变量的任何功能外,它被称为一个全局变量,在代码中任何地方都能访问到的对象拥有全局作用域。
当你声明一个变量在一个函数,它被称为一个局部变量,只能在函数内部访问。
JavaScript在ECMAScript 6之前没有块语句的规范;
例如,下面的代码将输出5,因为x的作用域是全局的。
if (true) {
  var x = 5;
 }console.log(x);  // 5
 
不过在ECMAScript6中,使用let语句,会产生改变
if (true) {
  let y = 5;
}console.log(y);  // undefined

声明提前
//例1
console.log(x === undefined); // logs "true"
var x = 3;
//例2 
var myvar = "my value";
(function() {
  console.log(myvar); // undefined  
  var myvar = "local value";
})();

或许你可能会迷惑,声明提前,赋值并不提前,所以上面的代码其实相当于
//例1
var x;
console.log(x === undefined); // logs "true"
x = 3;
//例2 
var myvar = "my value";
(function() {
  var myvar;
  console.log(myvar); // undefined  
  myvar = "local value";
})();

至于例2为什么没有输出my value,这就和JavaScript作用域链又关了
javascript中变量的查找是从作用域顶端开始逐级向上查找 一旦找到就停止
游客

返回顶部