变量,分为局部变量和全局变量
作用域:是指变量的使用范围,分为局部作用域和全局作用域
注意:js中没有块级作用域,即大括号中定义的变量,这个变量可以在大括号外面使用。函数中的大括号不算,函数中定义的变量是局部变量。
{
var num = 10;
}
console.log(num);
//输出:10
作用域链:变量的使用,是从里向外,层层搜索,最外层是最后搜索的,为0级。如果找到最外层还没有该变量,则结果报错。
var num=10; //作用域链 级别:0
var num2=20;
var str = "abc"
function f1() {
var num2=20;
function f2() {
var num3=30;
console.log(num);
}
f2();
}
f1();
预解析:浏览器在解析代码之前,会把变量的声明和函数声明提到其作用域的最上面。
变量的声明
//变量的提升
console.log(num);
var num=100;
// 输出:undefined,因为num的声明在输出之前,而赋值是在输出之后,其流程如下:
// var num;
// console.log(num);
// num=100;
函数的声明
f1();
function f1() {
console.log("这个函数,执行了");
}
//输出:这个函数,执行了
f2();
var f2=function () {
console.log("小杨好帅哦");
};
//输出:报错,因为这是函数的表达式,不是函数的声明,其流程如下
var f2;
f2();
f2=function () {
console.log("小杨好帅哦");
};