首页 > 其他分享 >变量提升与函数提升

变量提升与函数提升

时间:2023-10-10 21:56:14浏览次数:27  
标签:log console 函数 作用域 提升 fun 声明 变量

变量提升的主要原因是 JavaScript 的解释执行方式。在代码执行之前,JavaScript 引擎会扫描整个作用域,找到所有的变量声明(使用 var 关键字声明的变量)和函数声明,然后将它们提升到作用域的顶部。

例如,考虑以下代码:

javascript: console.log(name); // 输出 undefined var name = 'John';

在这个代码中,虽然 console.log 出现在 name 的声明之前,但由于变量提升的存在,它不会引发运行时错误。相当于 JavaScript 引擎将代码解释为:

javascript: var name; console.log(name); // 输出 undefined name = 'John';

这就是为什么会称之为 "变量提升",因为变量和函数声明会在实际代码执行之前被提升到作用域的顶部。

需要注意的是,变量提升只适用于使用 var 关键字声明的变量和函数,不适用于使用 letconst 声明的变量,因为 letconst 有块级作用域,并且不会被提升到块级作用域的顶部。因此,在使用 letconst 声明的变量之前引用它们会引发 ReferenceError。这是 JavaScript 中一个更加严格的行为,有助于减少一些潜在的错误。

console.log(fun) // function fun() {}
function fun() {}

if (false) {
  function fun2(){}
}
console.log(fun2) // undefined 不会报错

console.log(fun):在这一行中,函数 fun 的声明在 console.log 之前。由于函数声明的变量提升,fun 变量在 console.log 之前已经被创建,并且其值是函数 fun 本身,所以不会报错,输出的结果是 function fun() {}

function fun() {}:这是函数 fun 的声明,它在全局作用域中声明了一个函数。

if (false) { function fun2(){} }:虽然这里有一个 if 语句,但是由于条件始终为 false,因此 if 语句内的函数 fun2 不会被声明或创建。这个函数声明在条件内部,不会影响外部作用域。

console.log(fun2):在这一行中,尝试输出函数 fun2,但由于它在当前作用域中并未声明或创建(因为条件始终为 false,函数声明不会被执行),所以输出的结果是 undefined,并且不会报错。

总结:函数声明会被提升到其所在作用域的顶部,因此在声明之前引用函数是有效的,但在条件内部的函数声明只会在条件成立时执行,否则不会对外部作用域产生影响。

 

标签:log,console,函数,作用域,提升,fun,声明,变量
From: https://www.cnblogs.com/Ly021/p/17755849.html

相关文章

  • 微分有限函数(半搬自 whx)
    齐次微分方程\[\suma_iy^{(i)}=0\]\(a_i\)不必是常数。那么我们认为\(y\)函数微分有限。在OI中,我们一般研究形式幂级数,生成函数,所以有必要考察形式幂级数的微分有限性。P-递归数列待读wikipedia我英文怎么这么差啊此种数列存在\(d+1\)个均不恒为\(0\)的多项式......
  • 03-Shell环境变量深入
    1.自定义系统环境变量1.1全局配置文件/etc/profile应用场景当前用户进入Shell环境初始化的时候会加载全局配置文件/etc/profile里面的环境变量,供给所有Shell程序使用以后只要是所有Shell程序或命令使用的变量,就可以定义在这个文件中1.2案例/etc/profile定义存储自定义......
  • vue中的nextTick函数
    今天实现切换歌曲时发现问题,切换歌曲的逻辑就是更改列表索引获取当前播放歌曲,然后播放歌曲。结果更改歌曲成功了,但是无法切换完播放。后来发现问题,歌曲加载需要时间,播放的指令运行时歌曲还未加载好,所以就出现了无法正常播放的问题。vue中的nextTick函数:在下次DOM更新循环结束之......
  • fasthttp + `page partial gziped cache`: 页面输出服务性能提升20%
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯接上一篇:http中使用gzip输出内容时,如何预先压缩前一半页面?经过实测,对线上一个输出html的服务进行了改造,通过预先压缩页面前半部分的方法,此接口的性能提升了20%.......
  • vue2,3render函数的简单使用
    render函数的主要作用:创建虚拟DOM:render函数负责创建虚拟DOM元素,这些元素以JavaScript对象的形式表示页面的结构和内容。根据状态和数据生成UI:render函数根据组件的状态(data数据)、属性(props)、计算属性(computed)、方法(methods)等信息,生成虚拟DOM,包括元素、组件、事件......
  • 详解如何通过JavaScript实现函数重载
    有的同学在开发中可能遇到过一个困扰,但是很少有人去解决这个问题,我这用一个例子展现出来constsearcher={};searcher.findAll=()=>{console.log("查询所有用户");};searcher.findByName=(name)=>{console.log("按照用户名称查询");};searcher.findByFirstN......
  • sql server 编写函数,去除小数点后多余的0
    sqlserver编写函数,去除小数点后多余的0要在SQLServer中编写一个函数来去除小数点后多余的零,你可以使用以下示例的方法:CREATEFUNCTIONdbo.RemoveTrailingZeros(@inputDECIMAL(18,6))RETURNSVARCHAR(255)ASBEGINDECLARE@resultVARCHAR(255);--将DE......
  • 用友BIP商业网络-银企联助力新钢联集团结算效率高效提升
    新钢联集团成立于2007年8月,是集生产、研发、营销、工贸等产业为一体,跨地区、集团化铬铁生产企业,是国内铬系合金产品专业生产重点企业。目前,集团在中国、南非、津巴布韦和印尼拥有四个生产基地,其中国内生产基地位于内蒙古乌兰察布市境内,实现高碳铬铁年产能270万吨,年产值180亿元,现有......
  • 学习笔记426—keras中to_categorical函数解析
    keras中to_categorical函数解析1.to_categorical的功能简单来说,to_categorical就是将类别向量转换为二进制(只有0和1)的矩阵类型表示。其表现为将原有的类别向量转换为独热编码的形式。先上代码看一下效果:fromkeras.utils.np_utilsimport*#类别向量定义b=[0,1,2,3,4,5,6,7......
  • 学习笔记425—train_test_split 函数介绍
    train_test_split函数介绍在机器学习中,我们通常将原始数据按照比例分割为“测试集”和“训练集”,从sklearn.model_selection中调用train_test_split函数 简单用法如下:X_train,X_test,y_train,y_test=sklearn.model_selection.train_test_split(train_data,train_targe......