Search

与我们合作

我们专注:网站策划设计、网络多媒体传播、网站优化及网站营销、品牌策略与设计
主营业务:网站建设、移动端微信小程序开发、VI设计、网络运营、云产品·运维解决方案

有一个品牌项目想和我们谈谈吗?

您可以填写右边的表格,让我们了解您的项目需求,这是一个良好的开始,我们将会尽快与您取得联系。当然也欢迎您给我们写信或是打电话,让我们听到您的声音

您也可通过下列途径与我们取得联系:

地 址: 深圳.龙岗区大运软件小镇11栋3楼

电 话: 138 2888 4598 / 138 0880 9053

网 址: http://www.appvx.cn

快速提交您的需求 ↓

什么是JavaScript预解析

时间:2020-06-02 浏览:2791 编辑:深圳网站设计 来源:互联网

1Q :未声明变量,直接输出会出现什么结果?

console.log(num);

1A :报错:变量未被定义。

Uncaught ReferenceError: num is not defined

2Q :在输出变量后才声明并赋值变量会出现什么结果? 1

console.log(num);

var num = 10;

2A :显示 undefined 。

undefined

3Q :先调用函数,再定义函数会出现什么结果? 2

fn();

function fn() {

    console.log('Javier_Ji');

}3A :正常显示。

Javier_Ji

4Q :先调用函数,再声明函数表达式会出现什么结果? 3

fn();

var fn = function() {

console.log('Javier_Ji');

4A :错误: fn 不是函数。

Uncaught TypeError: fn is not a function

解释

JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的。 JavaScript 解析器在运行 JavaScript 代码的时候分为两步:

预解析:js 引擎会把 js 里面的所有的 var 以及 function 提升到当前作用域的最前面。

代码执行:按照代码书写的顺序从上往下执行。

预解析分为:变量预解析(变量提升)和函数预解析(函数提升)

变量提升:把所有的变量声明提升到当前的作用域最前面,不提升赋值操作。

函数提升:把所有的函数声明提升到当前的作用域最前面,不调用函数。


示例

下面的代码执行后会得到什么结果?4

fn();

console.log(c);

console.log(b);

console.log(a);

function fn() {

 var a = b = c = 9;

 console.log(a);

 console.log(b);

 console.log(c);

}


执行后结果如下:

Uncaught ReferenceError: a is not defined

针对2Q 的解答

先预解析,相当于执行了如下代码:

var num; 股票代码https://www.gendan5.com/topic/lcSearch.html

var num;   // 把变量声明提升到当前作用域(本例中是全局)最前面

console.log(num); // 执行后续的代码

num = 10;   // 赋值

针对3Q 的解答

先预解析,相当于执行了如下代码:

function() {

    console.log('Javier_Ji');

}     // 把函数声明提升到当前作用域(本例中是全局)最前面

fn();   // 执行后续的代码,函数被正常调用

针对4Q 的解答

先预解析,相当于执行了如下代码:

var fn;   // 把 var 声明提升到当前作用域(本例中是全局)最前面

fn();   // 执行后续的代码,由于函数还没被定义,且 var fn; 语句定义的是变量,则会报错, fn 不是函数

function() {

    console.log('Javier_Ji');

}     // 执行后续的代码

针对示例的解答

先预解析,相当于执行了如下代码:

function fn() {

    var a;    

    a = b = c = 9;

    console.log(a);

    console.log(b);

    console.log(c);

}

fn();

console.log(c);

console.log(b);

console.log(a);

本例中的代码 var a = b = c = 9; 相当于先在函数内部定义变量 var a ,之后赋值 a = b = c = 9 ,由此可得,变量 a 的作用域是在 fn 函数内部,而 b 和 c 相当于定义了一个全局变量。

网站设计.jpg


本站文章均为深正网站建设摘自权威资料,书籍,或网络原创文章,如有版权纠纷或者违规问题,请即刻联系我们删除,我们欢迎您分享,引用和转载,但谢绝直接搬砖和抄袭!感谢...
GO 欣赏案例
查看经典案例
在线咨询
电话咨询
0755-36630177
返回顶部
在线咨询 获取报价 电话咨询
获取报价
您的称呼:

*

您的电话:

*

您的邮箱:

*

提交 重置
重要的事情,电话里聊

接通客服

不方便的时候线上咨询,在线等哦