JS在页面加载过程中顺序执行。但是分块预编译、执行。
JS在执行前会进行类似”预编译”的操作,而且先预声明变量再预定义函数。
此时注意,是声明,不是定义,如:var a = 1; 在预编译中,只是执行了”var a”没有赋值,即在预编译结束时a 为undefined。
(注意)并不是先全文编译完在执行,而是块编译,即一个script块中,预编译再执行,然后(按顺序)下一个script块,预编译再执行,但此时上一个块中的数据都是可以用的,但下一个块中的函数,声明的变量都是不可用的。
变量没声明就引用,会报错,但对象方法,对象变量没声明,是undefined
在函数中变量不声明就赋值,会被认为是全局变量,用var声明后为函数变量
在执行函数时时也是先编译后执行,但要注意函数定义中(即大括号中)的代码即使有错只要函数不执行,就不会有影响,但一执行函数,开始函数预编译就会出错。
相关文章
- 【授课录屏】JavaScript高级(IIFE、js中的作用域、闭包、回调函数和递归等)、MySQL入门(单表查询和多表联查)、React(hooks、json-server等) 【可以收藏】
- JS中的作用域和作用域链
- 聊一下JS中的作用域scope和闭包closure
- JS三座大山再学习 ---- 作用域和闭包
- js中作用域链和作用域
- js中的执行环境和作用域链
- JS中的执行环境和作用域
- 【学习笔记】深入理解js原型和闭包(14)——从【*变量】到【作用域链】
- 【学习笔记】深入理解js原型和闭包(18)——补充:上下文环境和作用域的关系
- 【学习笔记】深入理解js原型和闭包(13)——【作用域】和【上下文环境】