js作用域之常见笔试题,运行结果题

笔试题中经常有运行结果题,而大多体型都是围绕作用域展开,下面总结了几种相关的题:

  1. 外层的变量函数内部可以找到,函数内部的变量(局部变量)外层找不到。
    function aaa() {
    var a = 10;
    }
    alert(a);//Error a is not defined 由于a是函数内部定义的局部变量,根据作用域关系,外层(全局环境)访问不到局部变量。因此会报错
    var a=10;
    function aaa(){
    alert(a);
    } function bbb(){
    var a=20;
    aaa();
    }
    bbb();//10 由于aaa()执行时aaa的作用域链中a=10;
  2. 当var不加时,会自动生成全局变量(不建议这样写,一般定义变量时建议使用var关键字)
function aaa() {
var a = b = 10;//b未用var定义相当于全局变量,所以在函数外能够被访问到
}
aaa();
//alert(a);//会报错,a is not defined
alert(b);//10 相当于全局变量可以访问 //此时上面代码相当于以下代码
var b;
function aaa() {
b = 10;
var a = b;
}
aaa();
alert(a);//Error
alert(b);//10

3.变量的查找是就近原则,找就近var定义的,就近找不到的话则在外层寻找。

var a=10;
function aaa(){
alert(a);
var a=20;
}
aaa();//undefined 就近原则找到var定义的,预解析过程

4.当参数和局部变量重名时,优先级等同。

var a=10;
function aaa(a){
alert(a);
var a=20;
}
aaa(a);//10 由于参数和局部变量优先级等同,所以查找时找到局部变量10然后再是var定义的局部变量
var a=10;
function aaa(a){
var a=20;
alert(a); }
aaa(a);//20 局部变量将参数覆盖了,因此a值为局部变量的值
var a=10;
function aaa(a){
a+=3;//基本类型 /参数相当于局部变量,只是局部修改了a的值,而在全局访问时依然是全局的值
}
aaa(a);
alert(a);//10
var a=[1,2,3];
var b=[1,2,3];
function aaa(a,b){
a.push(4);
     b=[1,2,3,4];
}
aaa(a,b);
alert(a);//[1,2,3,4] 引用类型是引用的地址,所以局部修改会影响全局的值
alert(b);//[1,2,3]
上一篇:python3的一些改动常用到的


下一篇:怎么样ubuntu 64 11.04 在执行32位程序