JavaScript中的变量提升和函数提升_第1页
JavaScript中的变量提升和函数提升_第2页
JavaScript中的变量提升和函数提升_第3页
JavaScript中的变量提升和函数提升_第4页
JavaScript中的变量提升和函数提升_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第JavaScript中的变量提升和函数提升目录前言为什么有变量提升javascript变量提升和函数提升总结

前言

在js中对变量进行操作后打印值经常会出现undefined的现象。其实原因是因为js中有一个叫做变量提升的功

举例:

vardata="lyyyyy";

getData();

functiongetData(){

//第一次打印

console.log("data值为:",data);

vardata="yyyyyyy";

//第二次打印

console.log("data值为:",data);

}

打印的值第一个为undefined,而第二个打印的值为yyyyy.

原因:

在执行getData()方法的时候会在函数内部首先将变量的声明提升到第一步。然后再声明函数内部的函数(如果函数内部有函数的话)。之后才会按照方法内部的逻辑先后顺序执行代码。前两步只是声明!!!看到这里应该就已经知道为什么会有上面那样的结果了。

实际的方法内部代码执行顺序应该是这样的:

functiongetData(){

//一。声明变量

vardata;

//二。声明函数(如果函数内部有函数的话)

//三。按照代码的顺序执行

console.log("data值为:",data);

data="yyyyyyy";

//第二次打印

console.log("data值为:",data);

}

看到拆分后的代码执行顺序对结果也就不迷茫了。

为什么有变量提升

那么为什么会出现变量提升这个现象呢

其实js和其他语言一样,都要经历编译和执行阶段。而js在编译阶段的时候,会搜集所有的变量声明并且提前声明变量,而其他的语句都不会改变他们的顺序,因此,在编译阶段的时候,第一步就已经执行了,而第二步则是在执行阶段执行到该语句的时候才执行。

javascript变量提升和函数提升

变量提升是把变量提升提到函数顶部。需要说明的是,变量提升只是提升变量的声明,并不会把赋值也提升上来。函数提升是把整个函数都提到前面去。函数表达式不能被提升,函数声明形式能被提升。

!DOCTYPEhtml

htmllang="en"

head

/head

body

script

//变量提升

functiontest(){

a=2;

vara;

console.log(a);

//2

}

test();

//变量提升,不会把赋值也提升上来

varv='HelloWorld';

(function(){

varv;

console.log(v);

//undefined

v='Iloveyou';

})();

//函数声明形式能被提升

functionmyTest(){

foo();

functionfoo(){

console.log("helloworld");

//helloworld

}

}

myTest();

//函数表达式不能被提升

functionmyTest2(){

foo();

//fooisnotafunction

varfoo=functionfoo(){

console.log("helloworld");

}

}

myTest2();

/script

/body

/html

!DOCTYPEhtml

htmllang="en"

head

/head

body

script

//输出GoodbyeJack

varname='World!';

(function(){

if(typeofname==='undefined'){

varname='Jack';

console.log('Goodbye'+name);

}else{

console.log('Hello'+name);

})();

//输出HelloWorld!

varname2='World!';

(function(){

if(typeofname2==='undefined'){

name2='Jack';

console.log('Goodbye'+name2);

}else{

console.log('Hello'+name2);

})();

//输出HelloWorld!

varname3='World!';

(function(){

if(typeof3==='undefined'){

varname3='Jack';

console.log('Goodbye'+name3);

}else{

console.log('Hello'+3);

})();

/script

/body

/html

总结

1.js会将变量的声明提升到js顶部执行,因此对于这种语句:vara=2;其实上js会将其分为vara;和a=2;两部分,并且将var

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论