js函数作用域及变量提升
前言
一直以来我对js有个特别不明白的地方,那就是作用域,因为以前学过c,一直没搞清两个之间的差别,今天就仔细谈一谈js作用域的问题。
JavaScript作用域
var a = 1; console.log(a); // 1 if (true) { var a = 2; console.log(a); // 2 } console.log(a); // 2
以上代码如果用c语言执行的话输出结果会是1、2、1,因为if会创建新的作用域,但js不会。
js会在函数里创建作用域。
1.全局作用域
创建全局作用域有几种方式:
(1)最外层函数和在最外层函数外面定义的变量拥有全局作用域
var a="test"; function foo(){ var b="demo"; function foo1(){ alert(b); } foo1(); } alert(a); //test alert(b); // error foo(); //demo foo1() //error
(2)所有末定义直接赋值的变量自动声明为拥有全局作用域(这个比较简单就不举例了)
(3)window对象的属性拥有全局作用域
2.局部作用域
局部作用域就是函数内部的作用域哈
那么现在问题来了,解释这么多有什么用喃?
了解这些之后,我们就可以来了解一个有意思的东西了。。。。。
变量提升及代码优化
要彻底理解JS的作用域和Hoisting,只要记住以下三点即可:
1、所有申明都会被提升到作用域的最顶上
2、同一个变量申明只进行一次,并且因此其他申明都会被忽略
3、函数声明的优先级优于变量申明,且函数声明会连带定义一起被提升
https://github.com/KeNanMi

浙公网安备 33010602011771号