js声明函数(function)和变量(variable)不得不防的坑

js声明函数(function)和变量(variable)不得不防的坑

在工作中初级程序员容易忽略的细节就是函数和变量的声明都存在提升,而且他们之间的提升是不同的,请看下面的演示:

function funa(){console.log("funa")}//函数声明

function funb(){console.log("funb")}//函数声明

function func(){//局部作用域

console.log(typeof funa);//function是一个函数

console.log(typeof funb);//undefined未定义

funa();//aa

funb();//funb is not a function

function funa(){console.log("aa")}//函数声明

var funb=function(){console.log("bb")}//函数表达式

}

func();

js声明函数(function)和变量(variable)不得不防的坑

可以看到func()输出结果为‘aa’和一个警告提示funb is not a function,函数的提升导致了这个结果,函数是对象并且提供局部作用域,所以如果函数内部声明了和外部相同的函数,函数内部作用域会把指针指向内部定义的函数声明,所以funa会输出“aa”。而funb为什么不是一个函数呢?typeof为什么会输出undefinedne?这就是函数提升和变量提升的不同之处了,函数声明不管是在处在文档的何处位置都将被提升到顶部,并且函数定义也被提升,所以funa()可以正常输出。而变量的提升只会提升变量的声明,也就是var funb这一部分,后面的定义赋值将被留在原来位置。所以输出undefined和funb不是一个函数。

了解函数和变量提升会对以后的工作中处理异常问题起到作用。希望大家一起讨论javascript的相关问题,请关注并留下您的高见。

js声明函数(function)和变量(variable)不得不防的坑

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值