js变量提升

xiaoxiao2021-02-28  22

在了解变量提升之前,应该先了解一下js到底是一种什么类型的语言,他的运行机制又是怎样的.

javascript 是一种弱类型、动态的、解释型的脚本语言。

弱类型:类型检查不严格,偏向于容忍隐式类型转换。 强类型:类型检查严格,偏向于不容忍隐式类型转换。 动态类型:运行的时候执行类型检查。 静态类型:编译的时候就知道每个变量的类型。 解释型:程序不需要编译,程序在运行的时候才翻译成机器语言,每执行一次都要翻译一次,因此效率比较低,但是跨平台性好。 编译型:程序在执行之前需要一个专门的翻译过程,把程序编译为机器语言的文件,运行时直接使用编译的结果就行了。 标记语言:标记语言的存在就是用来被读取(浏览)的,而其本身是没有行为能力的,在标记语言里你会看到<和>这些尖括号,这是用来写出“层次”和”属性”的,换句话说,它是被动的。并不具备与访问者互动的能力。 编程语言:它是具有逻辑性和行为能力,这是主动的。说通俗一点,它是有思想的。

脚本语言:它介于标记语言和编程语言之间,脚本语言不需要编译,可以直接用,由解释器来负责解释。

js代码解析原则

首先js引擎在读取js代码时会进行两个步骤,第一个步骤是解释,第二个步骤是执行。 

所谓解释就是会先通篇扫描所有的Js代码,然后把所有声明提升到顶端,第二步是执行,执行就是操作一类的。这就是变量提升.

变量提升:

console.log(global); // undefined var global = 'global'; console.log(global); // global function fn () {   console.log(a); // undefined   var a = 'aaa';   console.log(a); // aaa } fn();

可以看出来 变量提升只是将变量提前在顶部声明,但是赋值还是在代码本身的位置、

函数提升:

js中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升!如:

console.log(f1); // function f1() {} console.log(f2); // undefined function f1() {} var f2 = function() {}
转载请注明原文地址: https://www.6miu.com/read-2650180.html

最新回复(0)