谁能帮我解释下这个问题?JS基础

function test(){
  var a = b =1;
}
test();
console.log(b);

为何这里能打印出1,怎么成了全局变量了,不是在函数体内的嘛?
var a = 1,b =1;
这样就打印不出来了

阅读 1.4k
4 个回答

var a = b = 1
这里 a 是用 var 声明的,但是 b 不是。所以对 b 的赋值就是全局的 b

var a = 1, b = 1 ,这里 a, b 都是用 var 声明的。所以都是函数内部的。

var a = b =1;   
<==> b = 1 ; var a = 1;
<==> window.b = 1 ;var a = 1

连续声明变量是使用 , 逗号分隔的
var a = b = 1 的含义是 var 了一个 a 变量该变量取值是 b,但变量b并没被声明,变量b会自动挂载到全局window上

1.JavaScript可以不用var关键字声明变量,直接为变量赋值,这叫隐式声明。

function test(){
  var a = b =1;
}
test();
console.log(b);

本例中,b由于在作用域中没有声明,会到作用域外查找,作用域外会有一个window.b = undefined

2.正确理解变量赋值和函数作用域。

function test(){
  var a=1 , b =1;//中间是逗号运算符,逗号运算符可以实现连续运算,如此处多个变量连续赋值
}
test();
console.log(b);

本例中,b声明在函数内,函数外console.log(b)作用域并没有声明b变量,同时console.log(b)外无作用域,已是顶层作用域。因此会报b未声明。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题