您现在的位置是:首页 > 文章详情

【JavaScript高级进阶】JavaScript变量/函数提升的细节总结

日期:2018-08-06点击:319
版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/81478248
// 测试1 console.log('----------test1--------------'); console.log(global); // undefined var global = 'hahaha'; console.log(global); // hahaha function fn(){ console.log(a); // undefined var a = 'aaa'; console.log(a); // aaa } // 如果一个变量没有定义的话就去输出,就会报出错误 //console.log(a); // error : undefined fn(); // 代码执行思路解析 /*var global; // 变量提升,全局作用域范围内,此时只是声明,并没有赋值 console.log(global); // undefined global = 'hahaha'; // 此时给变量赋值 console.log(global); // 输出已经赋值过的global变量 function fn(){ var a; // 变量提升为函数作用域范围内 console.log(a); a = 'aaa'; console.log(a); } fn();*/ // 测试2 : 函数提升 console.log("------------------函数提升测试-----------------"); console.log(f1); // [Function: f1] console.log(f2); // undefined function f1(){ // 这块代码会自动函数提升,整个代码块提升到文件的最开始部分 } var f2 = function(){ } console.log(f2); // 测试3 console.log("------------test3---------------"); // 第一步会先去执行f1()函数,执行完毕这个函数之后开始打印输出这个函数的返回值 console.log(f1()); // undefined 123456hahaha function f1(){ console.log('aaa'); // aaa return '123456hahaha'; } console.log(f4); // var f4 undefined var f4 = function(){ console.log('f4 executed!'); return 'f4 hahaha!'; } console.log(f4, typeof f4); // 这里得到的实际上是一个函数 // 测试4 console.log('-------------test4------------'); console.log(aaa); // undefined aaa = '987654321'; // 987654321 console.log(aaa); var aaa = '123456789'; console.log(aaa); // 123456789 var aaa = '789'; console.log(aaa); // 789 // 测试5 console.log('--------------test5----------------'); var a = '12346789'; (function(){ // 这里的a默认是回去寻找全局作用域里面的a变量 console.log(a); /// error : a is not defined a = '113579'; var b = 'bbb'; console.log(a); })(); // 测试6 // 在方法外边不加上一个var是不能来定义变量的 //01. 都加var,在方法内则是局部变量,在方法外则是全局变量。 //02. 在方法内,加var为局部变量,不加var则是全局变量(在执行当前方法之后) //console.log(bianliang); // error : is not defined console.log('-----------------test6-----------------'); function test(){ //console.log(shuchubianliang); // error : is not defined } test(); var aaaa = 'I\'m a in all' function test1 () { // 相当于是var a, 然后输出a的值,当然是undefined console.log(aaaa) //console.log(window.a) var a = 'I\'m a in test1' console.log(a) } test1() // JavaScript会把作用域里的所有变量和函数提到函数的顶部声明 // JavaScript会使用undefined缺省值创建变量a console.log(aaaaaaa); // error var aaaaaaa = '11'; console.log('------------test7-------------'); //思考题: 请问下面的结果是什么? 为什么? 写下你的答案 show(); var a = true; if( a ){ function show(){ console.log( 1 ); } }else { function show(){ console.log( 2 ); } } //函数声明, 形如: function show(){ console.log( '函数声明方式' ); } // 会被提升为全局 //函数表达式, 形如: var show = function(){ console.log( '表达式方式' ); } // 不会被提升为全局的

 

原文链接:https://yq.aliyun.com/articles/647672
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章