龙空技术网

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

糊薯干子茶 423

前言:

目前大家对“js函数内部变量是否可以修改外部变量”大体比较关切,同学们都想要知道一些“js函数内部变量是否可以修改外部变量”的相关文章。那么小编同时在网上搜集了一些对于“js函数内部变量是否可以修改外部变量””的相关内容,希望朋友们能喜欢,大家快快来学习一下吧!

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

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();

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

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

标签: #js函数内部变量是否可以修改外部变量