JavaScript中变量和函数的提升学习
2017-02-24 14:56
549 查看
在JavaScript中变量和函数的声明会提升到最顶部执行。但是匿名函数不会提升。
函数的提升高于变量的提升。
函数内部如果用var声明了相同名称的外部变量,函数将不再向上寻找。
不同
以上代码经过变量提升,函数提升之后
经过变量提升
小结:
1. 首先funtion以及var会提升到当前作用域顶部
2. 匿名函数不会提升,bar = function(){}
3. 闭包不会提升
另一种情况
总结:至于其余两点,字面上也很好理解,就不赘述了。多读书多读书,打好基础,总是没错的。
函数的提升高于变量的提升。
函数内部如果用var声明了相同名称的外部变量,函数将不再向上寻找。
不同
<script>块中的函数互不影响。
基于以上几点做一些自己的学习总结
1.变量和函数的提升,匿名函数不提升
var表达式和function声明都会被提升到当前作用域的顶部 源代码地址bar(); var bar = function() {}; var someValue = 42; test([1,2,3]); function test(data) { if (false) { goo = 1; } else { var goo = 2; } for(var i = 0; i < 100; i++) { var e = data[i]; } }
以上代码经过变量提升,函数提升之后
var bar,someValue;//undefined function test(data) { var goo,i,e; if (false) { goo = 1; } else { goo = 2; } for(i = 0; i < data.length; i++) { e = data[i]; } console.log(e); } bar(); bar = function(){}; someValue = 42; test([1,2,3]); //首先bar()会报错因为bar目前还不是方法,someValue = 42; //test() -> goo = 1 ,e是传入数组的最后一个元素
var myvar = 'my value'; (function() { alert(myvar); // undefined var myvar = 'local value'; })();
经过变量提升
var myvar; myvar = "my value"; (function(){ var myvar ; alert(myvar); myvar = "local value"; })(); //我最初的疑惑是这个闭包算不算匿名函数,但是百度的时候有人说这种说法是错误的,我对闭包理解也不够深刻,所以我就做了一个测试,如果闭包提升了,那么alert应该是undefined,但是结果是alert -> my value; 所以结论就是闭包也不会提升。 var myvar; myvar = "my value"; (function(){ alert(myvar); })();
小结:
1. 首先funtion以及var会提升到当前作用域顶部
2. 匿名函数不会提升,bar = function(){}
3. 闭包不会提升
2. 函数的提升高于变量的提升
var a; function a(){}; console.log(typeof a);//function //但是不是function覆盖了var的声明 function a(){}; var a; console.log(typeof a);//function
另一种情况
function a(){}; var a = 1; console.log(typeof a);//number //以上代码等价于 function a(){}; var a; a = 1; console.log(typeof a);//a已经被重新赋值,所以当然是number //交换位置结果也一样 var a = 1; function a(){}; console.log(typeof a);//number
总结:至于其余两点,字面上也很好理解,就不赘述了。多读书多读书,打好基础,总是没错的。
相关文章推荐
- 【JavaScript学习笔记】7:函数提升,变量提升,异常抛掷和捕获,ES6的Map和Set
- javascript学习——变量提升和方法(函数)提升
- JavaScript中的作用域与函数和变量声明的提升
- 跟我学习javascript的var预解析与函数声明提升
- javascript的变量声明和函数声明提升
- javascript的变量声明和函数声明提升
- javascript的变量声明和函数声明提升
- JavaScript中变量和函数声明的提升
- 浅谈JavaScript中变量和函数声明的提升
- javascript的变量声明和函数声明提升
- javascript的变量声明和函数声明提升
- javascript的变量声明和函数声明提升
- JavaScript学习笔记(十一) 函数name属性和函数的提升
- Javascript中函数及变量定义的提升
- javascript的变量声明和函数声明提升
- 跟我学习javascript的var预解析与函数声明提升
- javascript的变量声明和函数声明提升
- JavaScript 中的变量和函数提升
- javascript的变量声明和函数声明提升
- javascript的变量声明和函数声明提升