Javascript
1.作用域
概念:
作用域分全局作用域和函数作用域
预编译
js的两个阶段,预编译和解释执行。
解题方法
第一阶段,作用域的创建阶段,即预编译阶段,他做了哪些事情?
要点:在函数作用域的创建阶段会有一个变量对象,也称AO对象。这个对象我们无法访问,仅供js引擎自己去访问
1.创建AO对象
2.找形参和变量的声明,作为AO对象的属性名,值是undefined
3.实参和形参相统一
4.找函数声明,如果有变量名称相同,会覆盖变量的声明
实例演示
function fn(a,c) {
console.log(a); //function a() { }
var a = 123;
console.log(a); //123
console.log(c); //function c() { }
function a() { }
if(false) {
var d = 678; //false不执行
}
console.log(d); //undefined
console.log(b); //undefined
var b = function () { }; //函数的表达式,非函数声明
console.log(b); //function () { }
function c() { }
console.log(c); //function c() { }
}
fn(1, 2)
// 解题思路
//预编译阶段
//a,c 形参
AO = {
a : undefined, //1 //function a() { }
b : undefined,
c : undefined, //2 //function c() { }
d : undefined
}
//解释执行阶段 (逐行执行)
1.
var a = 12
function fn() {
console.log(a)
var a = 45;
console.log(a)
}
fn()
2.
function fn() {
console.log(11)
function ff() {
console.log(22)
}
ff()
}
fn()
3.
function fn() {
console.log(5)
fn()
}
fn()
4.
var a = 123;
function fun() {
alert(a);
}
fun();
5.
var a = 123;
function fun() {
alert(a);
var a = 456;
}
fun();
alert(a);
6.
var a = 123;
function fun(a) {
alert(a);
a = 456;
}
fun();
alert(a);
7.
var a = 123;
function fun(a) {
alert(a);
a = 456;
}
fun(123);
alert(a);
8.
function test(a, b) {
console.log(a);
console.log(b);
var b = 234;
console.log(b);
a = 123;
console.log(a);
function a() {}
var a;
b = 234;
var b = function() {}
console.log(a);
console.log(b);
}
test(1);
9.
function fn(a) {
console.log(a);
var a = 123;
console.log(a);
function a() {}
console.log(a);
var b = function() {}
console.log(b);
function d() {}
}
fn(1);
10.
function fn() {
console.log(12)
}
var as = fn()
console.log(as)
11.
function fn() {
console.log(12)
return 45;
console.log(456)
}
fn()
12.
var a = 12;
function fn() {
console.log(a)
return 4;
var a = 45;
}
fn()
13.
var a = 100;
function testResult() {
var b = 2 * a
var a = 200
var c = a / 2
alert(b)
alert(c)
}
testResult()
网友评论