变量提升与函数提升
var v='jirengu';
console.log(v);
我们知道 这个时候运行a() 输出 jirengu ;
而
var v='jirengu';
function a(){
console.log(v);
var v="abcd";
}
这个时候a()输入结果却为undefined
Paste_Image.png
而这种情况
var v='jirengu';
if(1>0){
console.log(v);
var v="abcd";
}
这里console.log(V)输入结果为jirengu;
这里就涉及到Javascript的变量提升
顾名思义变量提升就是,是把下面的东西提到上面。在函数域里定义一个和外部变量一样名称的变量时,变量的声明会提升至第一句,赋值则不会变。
所以上面一段代码应为
var v='jirengu';
function a(){
var v;
console.log(v);
v="abcd";
}
这时候就很好理解为什么console.log(V)的值为undefied;
函数提升
在写JS代码的时候,有两种写法,一种是函数表达式,另外一种是函数声明方式。我们需要重点注意的是,只有函数声明形式才能被提升。
console.log(typeof foo);
console.log(typeof bar);
console.log(typeof add);
//函数的声明
function foo(){
alert('foo');
}
//命名函数表达式
var bar = function(){
alert('bar');
};
// 函数表达式-匿名函数
var add = function(a,b){
return a+b;
};
这个时候输出结果为 function ,undefined,undefined;
不像其他对面对象的编程语言(比方说C++,Java等等),javascript没有块级作用域(被花括号包围的);当是,javascript有拥有函数级别的作用域,也就是说,在一个函数内定义的变量只能在函数内部访问或者这个函数内部的函数访问。——块,如if语句,并不会创建一个新的作用域。只有函数才会创建新的作用域。
参考:###Javascript变量提升和函数提升