JavaScript声明过的变量提高每每会影响到咱们对变量的正常获取,因此特写此文,以便之后翻阅。javascript
//变量声明提高 function test() { var a = "1"; var f = function(){}; var b = "2"; var c = "3"; } //上述代码等价于 function test() { var a,f,b,c; a = "1"; f = function(){}; b = "2"; c = "3"; }
js中定义变量有两种状况:(注意在方法外不加var是不能定义变量的,出现xx is not defined)java
- 都加var,在方法内则是局部变量,在方法外则是全局变量。
- 在方法内,加var为局部变量,不加var则是全局变量(在执行当前方法以后)
因为test1函数里面定义了变量a,因为git
var a = 'I\'m a in all' function test1 () { console.log(a) console.log(window.a) var a = 'I\'m a in test1' console.log(a) } test1()
上述代码至关于函数
var a = 'I\'m a in all' function test1 () { var a console.log(a) // undefined console.log(window.a) // I'm a in all(由于window指的是全局环境) a = 'I\'m a in test1' console.log(a) // I'm a in test1 } test1()
var a = 'I\'m a in all' function test2 () { console.log(a) // I'm a in all a = 'I\'m a in test2' // 这里原本就是赋值,因此上边的a会输出全局变量 console.log(a) // I'm a in test2 } test2()
function test3_1 () { console.log(a) // 报错(Uncaught ReferenceError: a is not defined),阻断如下代码的运行 a = 'I\'m a in test3' console.log(a) // 不输出 } console.log(a) test3_1() console.log(a) // 不输出
function test3_2 () { a = 'I\'m a in test3' // 全局变量(可是在方法执行后生效) console.log(a) // I'm a in test3 } // console.log(a) // 若是在方法执行前打印,仍是会报错(Uncaught ReferenceError: a is not defined),阻断如下代码的运行 test3_2() console.log(a) // I'm a in test3(原本没有全局变量a,当test3运行时,定义了一个全局变量a,因此这里会输出)
我的博客:午后南杂gitlab