作用域问题
1、
var a=123;
function fun(){
alert(a) //123
}
fun()
2、
var a=123;
function fun(){
alert(a); //undefined,作用域:此时的a应该访问函数内声明的a,但是变量声明分两步:变量创建+变量初始化(初始化为undefined).然后才是赋值。因此,此处
输出undefined(这里面也有个变量提升的问题在里面)
var a=456;
}
fun()
alert(a) //123
3、
var a=123;
function fun(){
alert(a); //123 在函数题内没有找到变量a的声明,于是在外层找,找到外层全局声明var a=123,于是调用函数时,输出123
a=456;
}
fun()
alert(a) //456
4、
var a=123;
function fun(a){
alert(a); //undefined 没有传参
a=456;
}
fun();
alert(a) //123
5、
var a=123;
function fun(a){
alert(a); //123 传参进来后步骤如同题3
a=456;
}
fun(123)
alert(a) //123
6、
var a=12;
function fn(){
console . log(a) //undefined
var a=45;
console . log(a) //45
}
fn()
7、
var a=12;
function fn(){
console . log(a) //12
a=45;
console . log(a) //45
}
fn()
8、
function fn(){
console . log(11)
function ff(){
console . log(22)
}
ff() //22
}
fn() //11
9、
var a=12;
function fn(){
console . log(a) //undefined 同题2
return 4;
var a=45;
}
fn()
10、
var a=45;
function fn(a){
console . log(a) //undefined 没有传参
}
fn()
11、
console . log(total); //undefined
var total=0;
function fn(num1,num2){
console . log(total); //undefined 同题2
var total=num1+num2;
console . log(total) //300
}
fn(100,200)
console . log(total) //0 是全局的total
12、
console . log(to) //undefined
var to=1;
function fn(n1,n2){
console . log(to) //1
to=n1+n2;
console . log(to) //30
}
fn(10,20)
console . log(to) //30
13、
function fn(a){
console . log(a) //function
var a=123;
console . log(a) //123
function a(){ }
console . log(a) //123
var b=function(){ }
console . log(b) //function
function b(){ }
}
fn(1)
注:如果我们声明得变量和函数同名了,在预解释得时候只声明一次
14、
function test(a,b){
console . log(b) //function
console . log(a) //1
c=0;
a=3;
b=2;
console . log(b); //2
function b(){ }
function d(){ }
console . log(b) //2
}
test(1)
15、
fun