js变量提升

首先 javascript 是一种弱类型、动态的、解释型的脚本语言。
弱类型:类型检查不严格,偏向于容忍隐式类型转换。 
强类型:类型检查严格,偏向于不容忍隐式类型转换。 
动态类型:运行的时候执行类型检查。 
静态类型:编译的时候就知道每个变量的类型。 
解释型:程序不需要编译,程序在运行的时候才翻译成机器语言,每执行一次都要翻译一次,因此效率比较低,但是跨平台性好。 
编译型:程序在执行之前需要一个专门的翻译过程,把程序编译为机器语言的文件,运行时直接使用编译的结果就行了。 
标记语言:标记语言的存在就是用来被读取(浏览)的,而其本身是没有行为能力的,在标记语言里你会看到<和>这些尖括号,这是用来写出“层次”和”属性”的,换句话说,它是被动的。并不具备与访问者互动的能力。 
编程语言:它是具有逻辑性和行为能力,这是主动的。说通俗一点,它是有思想的。
脚本语言:它介于标记语言和编程语言之间,脚本语言不需要编译,可以直接用,由解释器来负责解释。
 
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。hoisting(变量提升)
 
变量提升(把变量声明提升到当前执行环境的最顶端)
<script type="text/javascript"> console.log(a);//输出结果 undefined var a=10; </script>
 
函数声明提升 (函数声明提升直接把整个函数提到执行环境的最顶端) 
foo(); function foo(){ console.log("aaa"); //aaa }
var的话,只会提升函数名
变量提升只提升函数名 而函数提升会提升整个函数题 注意:函数提升在变量提升上面。
 
1、var a //变量声明,提升到作用域顶端
2、var b = "test" //声明部分提升,赋值部分不会提升(变量定义)
3、var c = function () {} //函数定义(函数表达式)部分提升
4、function d(){} //函数声明,全部提升,优先级比变量提升高;名字相同的变量声明会被忽略

原文地址:https://www.cnblogs.com/limengyao/p/9549786.html