博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解析javascript 是由上到下执行的?
阅读量:6573 次
发布时间:2019-06-24

本文共 829 字,大约阅读时间需要 2 分钟。

hot3.png

一、声明优先

js 是由上到下一行一行执行的,并不完全正确,考虑以下代码:

a = 2;

var a;

console.log(a);

输入结果是什么? 并不是undefined,输出结果是2

==============

考虑下面这段代码:

console.log(a);

var a = 2;

这段代码你可能认为会抛出异常 ReferenceError ?然而输出的结果是undefined

===============

js引擎有两个步骤,编译和运行,正确的思考是,包括变量和函数在内所有的声明都会在任何代码被执行首先被处理

所以第一个代码段实际上是如下的方式进行处理:

var a;

a = 2;

console.log(a);

第二个代码段实际上是如下流程:

var a;

console.log(a);

a = 2;

==================

函数声明会被提升,但是函数表达式并不会被提升:

foo(); // TypeError异常

var foo = function(){

    //dosomething...

}

二、函数优先

函数声明和变量声明都会被提升,但是函数声明会首先被提升,然后是变量声明。如下代码:

foo();

var foo;

function foo(){

    console.log(1)

}

foo = function(){

    console.log(2);

}

结果会输出1而不是2,js引擎是如下理解这段代码的:

function foo(){

    console.log(1);

}

foo();

foo = function(){

    console.log(2);

}

注意:var foo 尽管出现在function foo()...的声明之前,但是他是重复的声明,在这里被忽略了,因为函数声明在变量声明之前

 

转载于:https://my.oschina.net/u/3229305/blog/915574

你可能感兴趣的文章
1163: 零起点学算法70——Yes,I can!
查看>>
zookeeper原理及作用
查看>>
[ZJOI2015]诸神眷顾的幻想乡
查看>>
2018-2019-2 网络对抗技术 20165318 Exp1 PC平台逆向破解
查看>>
关于图片或者文件在数据库的存储方式归纳
查看>>
存储过程和SQL语句比较及存储过程在C#中调用方法
查看>>
hihocoder 1014 Trie树
查看>>
ADO.NET笔记——使用DataSet返回数据
查看>>
【Spark篇】---SparkSQL on Hive的配置和使用
查看>>
【机器学习】--关联规则算法从初识到应用
查看>>
windows 下nginx php安装
查看>>
MOTO XT702添加开机音乐
查看>>
Codeforces Round #565 (Div. 3) C. Lose it!
查看>>
Python脚本日志系统
查看>>
Spring异常——BeanNotOfRequiredTypeException
查看>>
B0BO TFS 安装指南(转载)
查看>>
gulp常用命令
查看>>
TCP(Socket基础编程)
查看>>
RowSet的使用
查看>>
表单提交中的input、button、submit的区别
查看>>