版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
JavaScript题库
JS执行顺序
1. 语法分析
2. 预编译
生成AO对象(函数调用时)
形参和变量作为AO对象的属性名, 值是undefined
实参赋值给形参
函数名作为AO对象的属性名, 把函数体作为属性值
3. 执行JS代码
1.
function outer() {
function inner() {
var a = 4;
c = 5;
console.log(a); //4
console.log(b); //3
console.log(c); //5
}
var b = 3;
inner(); //AO{a:4, c:5}
}
var a = 2;
outer(); //AO{b:3}
//GO{a:2}
2.
function test() {
var n = 5;
function add() {
n++;
console.log(n); //6 7
}
return add;
}
var result = test();
result(); //AO{n:6}
result();
3.
function demo() {
var arr = [];
for (var i = 0; i < 10; i++) {
arr[i] = function() {
console.log(i);
}
} // 循环结束之后才会调用
return arr;
}
var result = demo();
for (var j = 0; j < 10; j++) {
result[j](); //AO{arr:[fn, fn, fn, fn, fn, fn, fn, fn, fn, fn], i:10}
}
4.
var a = 2;
function auto(a) {
if (typeof a) {
console.log('python')
} else {
console.log('java')
}
var a;
}
auto(); //AO{a:undefined} //python
//GO{a:2}
5.
function auto(a) {
console.log(a); // fn
function a() {}
var a = 2;
console.log(a); //2
}
auto('undefined'); //AO{a:fn}
6.
function foo() {
console.log('python')
}
function bar() {
console.log('python')
}
function host() {
console.log(typeof foo); //'fn'
console.log(typeof bar); //'undefined'
foo(); //'java'
bar(); //报错
function foo() {
console.log('java')
}
var bar = function() {
console.log('java')
}
}
host(); //AO{bar:undefined; foo:fn}
//GO{foo:fn; bar:fn; host:fn}
7.
var scareMe = function() {
console.log('boo'); //boo
scareMe = function() {
console.log('double boo')
}
}
scareMe(); //AO{scareMe:fn}
scareMe(); //double boo
8.
// typeof aaaaaaaaa == 'undefined'
var x = 1;
if (function fn() {}) {
x += typeof fn;
console.log(x); //'1undefined'
}