JS变量声明提升如何理解,实现方法是什么?
Admin 2022-10-13 群英技术资讯 1280 次浏览
关于“JS变量声明提升如何理解,实现方法是什么?”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。如下代码输出的结果是?
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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍JavaScript继承方式,在JavaScript学习中,继承是很重要的一个知识内容。下文会给大家介绍原型式继承、原型链式继承、借用构造函数、组合继承、寄生组合式继承这几种继承方式,感需求的朋友就继续往下看吧。
这篇文章我们来了解JavaScrip怎样判断回文数的相关内容,下文分享的示例是利用数组转为字符串数组,再用reserve()翻转数组,然后对于是否相等的方法来判断,下文我们来详细的了解看看实现思路及方法,有需要的朋友可以参考,接下来就跟随小编来一起学习一下吧!
Vue.Draggable实现交换位置,供大家参考,具体内容如下前言最近的一个项目接触了到了Vue.Draggable这个组件。不过我们的需求和Vue.Draggable这个组件所支持的有些出入。这个拖拽组件属于插入的模式。一但拖拽的是相间的元素(中间隔着几个元素),那么拖拽元素就会占据被拖拽元素的位置,而后续元素位置
这篇文章主要为大家详细介绍了Vue导入Echarts实现折线散点图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在开发后台管理系统的时候,很多地方都要用到导出excel 表格,比如将table中的数据导出到本地,这篇文章主要给大家介绍了关于Vue导出Excel功能的相关资料,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008