JS变量声明提升如何理解,实现方法是什么?
Admin 2022-10-13 群英技术资讯 806 次浏览
如下代码输出的结果是?
var num = 123; function foo1(){ console.log( num ); //undefined var num = 456; console.log( num ); //456 } foo1();
Javascript代码执行分为两个大步:
预解析的过程
代码的执行过程
程序在执行过程中,会先将代码读取到内存中检查,会将所有的声明在此进行标记,所谓的标记就是让JS解析器知道有这个名字,后面在使用名字的时候不会出现未定义的错误。这个标记过程就是提升。
声明:
名字的声明,标识符声明(变量名声明)
函数的声明
函数声明与函数表达式有区别,函数声明是单独写在一个结构中,不存在任何语句,逻辑判断等结构中
function f() {} function func() { // 函数声明 } if ( true ) { function func2 () {} //函数表达式 } var f = function func3 () {}; //函数表达式 this.sayHello = function () {}; //函数表达式 var i= 1; function func4 () {} // 函数声明 var j = 2; }
首先函数声明告诉解析器有这个名字存在,该阶段与名字声明一样
告诉解析器,这个名字对应的函数体是什么
var num = 1; function num () { alert( num ); } num(); // 报错
分析
预解析代码,提示名字
开始执行代码,第一句话从赋值语句开始执行
var num = 123; function foo1(){ console.log( num ); //undefined var num = 456; console.log( num ); //456 } foo1();
num = 123;
执行函数调用
if ( ! 'a' in window ) { var a = 123; } console.log( a );
首先,预解析,读取提升 a
,有一个名字 a
存在了
其次,in
运算符:判断某一个字符串描述的属性名是否在对象中
执行第一个判断:! 'a' in window
最后,打印结果 a
的值为 undefined
if ( false ) { function f1 () { console.log( 'true' ); } } else { function f1 () { console.log( 'false' ); } } f1();
预解析:提升 f1 函数,只保留提升后的内容,所以打印是 false
执行代码,第一句话就是一个空的if结构
if ( true ) { } else { }
执行函数调用,得到 false
function foo () } {} var foo = function () {};
上面的语法是声明,可以提升,因此在函数上方也可以调用
下面的语法是函数表达式,函数名就是foo ,他会提升,提升的不是函数体
函数表达式也是支持名字语法
var foo = function func1 () {}; func();
函数有一个属性name,表示的是函数名,只有带有名字的函数定义,才会有name属性值,否则是“”
新的浏览器中,写在if、while、do..while结构中的函数,都会将函数的声明转换成特殊的函数表达式
将代码
if (...) { function foo () { ... } }
转换成
if (...) { var foo = function foo () { .... } }
完
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
小程序怎样实现列表分页展示及上下页点击?下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
如果调用者在函数返回时能够获得预期结果(即获得预期返回值或看到预期效果),则该函数同步。如果函数同步,即使调用函数执行的任务耗时,也会等到得到预期的结果。
有时候我们会遇到对数组进行筛选的需求,例如在一组输入的数字中,筛选出符合要求的数组,那么这用JavaScripy要怎样实现呢?下面就给大家分享一下js实现筛选数组的代码。
这篇文章我们来了解TypeScript的函数重载功能的相关内容,主要介绍TypeScript中函数重载写法,下文有很详细的介绍,对大家学习或工作会有帮助,接下来就跟随小编来一起学习一下吧!
在做web开发时,我们会经常遇到表单验证的需求。对新手来说,掌握表单验证对于理解字符串处理以及正则表达式都有很大的帮助。这篇文章就主要介绍,原生介绍实现表单验证功能。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008