javascript变量声明 及作用域
javascript变量声明提升 javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到 当前作用域 的最前面。 先看一段代码 1 2 3 4 5 var v = "hello" ; ( function (){ console.log(v); var v = "world" ; })(); 这段代码运行的结果是什么呢? 答案是:undefined 这段代码说明了两个问题, 第一,function作用域里的变量v遮盖了上层作用域变量v。代码做少些变动 1 2 3 4 5 var v = "hello" ; if ( true ){ console.log(v); var v = "world" ; } 输出结果为”hello”,说明 javascript是没有块级作用域的 。 函数是JavaScript中唯一拥有自身作用域的结构。 第二,在function作用域内,变量v的声明被提升了。所以最初的代码相当于: 1 2 3 4 5 6 var v = "hello" ; ( function (){ var v; //declaration hoisting console.log(v); v = "world" ; })(); 声明、定义与初始化 声明宣称一个名字的存在,定义则为这个名字分配存储空间