JavaScript代码是从上而下执行的;那么,在前面使用了一个之后声明的变量会发生什么呢?
我们就来研究一下JavaScript中关于变量和函数的提升:
变量的提升:
- 变量的提升
var定义:将声明的变量名提升至代码的最前面
函数中声明的变量提升至函数内部最前面
提前使用则打印undefined
console.log(a) // undefind
var a = 1;
console.log(a) // 1
- 全局变量概念
没有提升,提前使用则报错 未定义
在函数中定义全局变量,(函数执行后)可在函数外使用
console.log(a); // 报错
a = 1;
console.log(a); // 1
- 局部变量:在函数内部声明的变量,不可在函数外部使用
就近原则,使用自己内部的变量
function fnName() {
var a = 5;
var f = 6;
e = 'e';
console.log(a); // 5
}
fnName();
console.log(e); // 'e'
console.log(f); // 报错
- 全局变量:在全局下声明的变量,定义后,可在任何地方使用(涉及到提升)
特殊的全局变量: window下的属性(未使用var)
函数的提升:
- 函数声明式
function fnName() {
console.log(1);
}
整个函数体会全部提升:
函数名与变量名相同,则函数名权重会高
同名函数取最后一个同名函数
- 函数表达式
var fnName2 = function () {
console.log(2);
}
按照变量的提升方式: undefined
- 函数重载:Js里面是没有重载
JS中的函数没有重新载入的概念,而是以最后一个同名函数为基准;
网友评论