一、
<script type="text/javascript">
/*
函数的作用域,是看在哪里定义的,而不是在哪里执行的
*/
var a = 10;
x();
function x(){
var a = 20;
y();
}
function y(){
alert( a ); //这里弹的是全局的a 10;
}
/*
y是全局函数 所有a应该找全局的a,跟执行没关系
*/
</script>
<script>
/* 结果: function a(){ alert( 20 ); } 10 10 30 fucntion a(){ var a = 20; alert( a ); } 20 fucntion a(){ var a = 20; alert( a ); }
解析:
全局作用域下
1、编译:
var a ;
function a(){
alert( 20 );
}
var a ;
var a ;
函数优先级最高 编译结束 a就是函数
2、执行
alert( a ) 弹出function a(){ alert( 20 ); }
a = 10;
alert( a ) 弹出 10
function a(){
alert( 20 ); 函数定义 跳过
}
alert( a ) 弹出 10
a = 30;
alert( a ) 弹出 30
a = fucntion a(){
var a = 20;
alert( a );
}
alert( a ) 弹出 fucntion a(){ var a = 20; alert( a ); }
a() ====>新的作用域
1、编译:
var a
2、执行:
a = 20
alert( a ) 弹出 20
alert( a ) 弹出 fucntion a(){ var a = 20; alert( a ); }
*/
// 作业一
alert( a );
var a = 10;
alert( a );
function a(){
alert( 20 );
}
alert( a );
var a = 30;
alert( a );
var a = function a(){
var a = 20;
alert( a );
}
alert( a );
a();
alert( a );
/*
练习
全局作用域
1、编译
var a ;
var b ;
function fn(){
var a = 20;
return function (){
a++;
alert( a );
}
}
2、执行
a = 10;
b = fn() =====fn()执行 有函数执行要处理到最简结果
新的作用域 结果是: b = function (){ a++ ; alert( a );}
1、编译:
var a ;
2、执行:
a = 20;
return function (){
a ++;
alert( a );
}
结束 返回的 function (){ a++ ; alert( a );} 给b
fn()() 代码从左往右执行 先执行
fn()新的作用域
1、编译:
var a;
2、执行:
a = 20;
return function (){
a++;
alert( a );
}
fn()执行结束 返回值 function (){ a++; alert( a ); }
再执行
fn()();
1、编译:
没有
2、执行:
a++
alert( a ) 弹出 21
b(); 新的作用域 function (){ a++ ; alert( a );} 执行 定义变量先自己的作用域里找,如果没有向哪里定义的父级
1、编译:
没有
2、执行:
a++ a = 21
alert( a ) 弹出 21
b() 新的作用域 function (){ a++ ; alert( a );} 执行
1、编译:
没有
2、执行:
a++ 上面执行完 a = 21
alert( a ) 弹出 22
fn()() 同上
*/
var a = 10;
var b = fn();
fn()();
b();
b();
fn()();
function fn(){
var a = 20;
return function (){
a++;
alert( a );
}
}
/*
练习2
全局作用域:
1、编译:
var a;
var b;
function fn(){
var a = 20;
return function (){
a++;
alert( a );
}
}
2、执行:
a = 10;
b = fn() =====新的作用域 结果: b = function (){ a++ alert( a ) }
1、编译:
没有
2、执行:
a = 20 改变全局的a
return function (){ a++ alert( a ) }
fn()返回 function (){ a++ alert( a ) }
fn()() 代码从左往右执行 先执行
fn()新的作用域
1、编译:
没有
2、执行:
a = 20;
return function (){
a++;
alert( a );
}
fn()执行结束 返回值 function (){ a++; alert( a ); }
再执行
fn()();
1、编译:
没有
2、执行:
a++ a=21
alert( a ) 弹出 21
b(); 新的作用域 function (){ a++ ; alert( a );} 执行 定义变量先自己的作用域里找,如果没有向哪里定义的父级
1、编译:
没有
2、执行:
a++ a = 22
alert( a ) 弹出 22
b() 新的作用域 function (){ a++ ; alert( a );} 执行
1、编译:
没有
2、执行:
a++ 上面执行完 a = 23
alert( a ) 弹出 23
fn()() 同上 a=21
*/
var a = 10;
var b = fn();
fn()();
b();
b();
fn()();
function fn(){
a = 20;
return function (){
a++;
alert( a );
}
}
</script>
网友评论