预解析:提前解析代码,也就是在解析过程中会先将函数声明和变量声明提前解析。
作用域:局部能访问全局,全局不能访问局部。
f();
function f() {
var num = 10 ;
console.log(num) ;
}
答案:10
function f() {
var num = 10 ;
console.log(num) ;
}
f();
答案:10
function f() {
console.log(num) ;
var num = 10 ;
}
f();
答案:undefined
var num = 20 ;
function f() {
console.log(num) ;
var num = 10 ;
}
f();
答案:undefined
f函数内操作步骤把声明提前了
{
var num;
console.log(num) ;
num = 10 ;
}
var num = 20 ;
function f() {
console.log(num) ;
}
f();
答案:20
f();
var num = 20 ;
function f() {
console.log(num) ;
}
答案:undifined
操作步骤
var num ;//函数调用的时候会把函数的声明提升到作用域的上面
function f() {//变量的声明会提升到变量使用之前
console.log(num) ;
}
f();
num = 20 ;
案例
对不同<script></script>标签对里面重名的函数,预解析不会冲突,只会执行该script标签内的函数调用各玩各的,script就是国家分界线,互不干扰。
console.log(f());
function f() {
console.log("函数");
}
var f = 1;
console.log(f);
函数
undefined
1
console.log(f);
function f() {
console.log("函数");
}
var f = 1;
console.log(f);
ƒ f() {
console.log("函数");
}
1
流程:
var f ;
function f() {
console.log("函数");
}
console.log(f);
f = 1;
console.log(f);
var a = 18 ;
f();
function f() {
var b = 9 ;
console.log(a) ;
console.log(b) ;
var a = '123' ;
}
undifined
9
流程:
var a ;
a= 18 ;
function f() {
var b ;
var a ;
b = 9 ;
console.log(a) ;
console.log(b) ;
a = '123' ;
}
f();
f();
console.log(c) ;//9
console.log(b) ;//9
console.log(a) ;//报错
function f() {
var a = b = c = 9;
console.log(a) ;//9
console.log(b) ;//9
console.log(c) ;//9
}
流程:
function f() {
var a ;
a=8;
b =8;//没有var定义,所以b是全局变量;
c = 8 ;//没有var定义,所以c是全局变量;
console.log(a) ;
console.log(b) ;
console.log(c) ;
}
f();
console.log(c) ;
console.log(b) ;
console.log(a) ;
sort();中可以写一个回调函数来给数组指定排序的规则
var arr = [1,6,9,5];//从小到大输出
console.log(arr);
arr.sort(function(a,b) {
console.log("a 的值是"+a+"\tb的值是"+b+"<br>");
return a - b ;
});
console.log(arr);
//
Array(4)
0: 1
1: 5
2: 6
3: 9
length: 4
a 的值是6 b的值是1<br>
a 的值是9 b的值是6<br>
a 的值是5 b的值是9<br>
a 的值是5 b的值是6<br>
a 的值是5 b的值是1<br>
Array(4)
0: 1
1: 5
2: 6
3: 9
length: 4