资讯专栏INFORMATION COLUMN

js预解析以及案例里的坑

tianren124 / 3283人阅读

摘要:预解析作为一门解释型脚本语言,特点是边解析边执行。而预解析则是,提前解析的意思,也就是所说的变量提升。报错以上相当于报错因为跟都是用隐式全局变量,所以答案是,而是用声明的局部变量,在函数以外访问,会报错。

js预解析
js作为一门解释型脚本语言,特点是边解析边执行。而预解析则是,提前解析的意思,也就是所说的变量提升。
console.log(a);
var a = 10;//undefined

这里的结果是undefined而并不是a is not defined。是因为var a被提升到console.log之前,即

var a;
console.log(a);
var a = 10;//undefined

但是函数提升则不是undefined的结果,而是结果正常。

function foo(){
    console.log("aaa");
};
foo();//aaa

VS

foo();//aaa
function foo(){
    console.log("aaa");
};

案例里的坑 一个闹心的例子
foo();//20
var number =20;
function foo(){
    console.log(number);
}

函数的例子
foo();//undefined
var number =20;
function foo(){
    console.log(number);
    var number = 10;
}

函数提升了,函数中的变量number也被提升了,结果就成了undefined

隐藏的隐式全局变量
以下刚开始,我的答案是9 9 9 报错 报错 报错,后来才发现里面有坑。
foo();
console.log(c);//9
console.log(b);//9
console.log(a);//报错 a is not defined
function foo(){
    var a=b=c=9;
    console.log(a);//9
    console.log(b);//9
    console.log(c);//9
}

以上相当于

function foo(){
    var a;
        c = 9;
        b = c;
        a = b;
    console.log(a);//9
    console.log(b);//9
    console.log(c);//9
}
foo();
console.log(c);//9
console.log(b);//9
console.log(a);//报错 a is not defined

因为b跟c都是用隐式全局变量,所以答案是9,而a是用var声明的局部变量,在函数以外访问,会报错。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94665.html

相关文章

  • 【连载】前端个人文章整理-从基础到入门

    摘要:个人前端文章整理从最开始萌生写文章的想法,到着手开始写,再到现在已经一年的时间了,由于工作比较忙,更新缓慢,后面还是会继更新,现将已经写好的文章整理一个目录,方便更多的小伙伴去学习。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 个人前端文章整理 从最开始萌生写文章的想法,到着手...

    madthumb 评论0 收藏0
  • Nextjs中文文档

    摘要:中文站点中文站当前翻译版本为。注意将不能使用在子组件中。只能使用在页面中。替换路由组件默认将新推入路由栈中。以防服务端渲染发生错误,建议事件写在生命周期里。禁止文件路由默认情况,将会把下的所有文件匹配路由如渲染为如果你的项目使用 Next.js 是一个轻量级的 React 服务端渲染应用框架。 Next.js中文站点 http://nextjs.frontendx.cn Next.j...

    luckyw 评论0 收藏0
  • 深入理解 Javascript 之 作用域

    摘要:作用域是门动态语言,跟不一样,可以随意定义全局变量和局部变量,变量会在该作用域下提升,而且没有块级作用域。一预处理作用域解析的作用域只用两种,一个是全局的,一个是函数的,也称为全局作用域和局部作用域局部作用域可以访问全局作用域。 作用域 JavaScript是门动态语言,跟Java不一样,JavaScript可以随意定义全局变量和局部变量,变量会在该作用域下提升,而且JavaScrip...

    banana_pi 评论0 收藏0
  • Javascript中的作用域

    摘要:作用域的概念所谓作用域,作用就是指读,写等操作,而域便是指空间,范围等中的域有是全局的域,相应地里面的变量就是全局变量,函数就是全局函数如果有多个包住的域的话,函数会自上而下执行,比如写了两的时候便会从上到下先执行第一个再执行第二个的代码比 作用 域的概念 所谓作用域,作用就是指读,写等操作,而域便是指空间,范围等 js中的域有 1.script script是全局的域,相应地里面的变...

    AlphaWatch 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<