关于为函数形参赋值和搜索变量标识符的云云

为形参提供默认值是以前的一种流行方法:

function foo(a){
    a=a||1;
    console.log(a);
}

foo();     // 1
foo(12);  // 12

你看,如果函数调用时不提供实参,形参a会被赋1。另:最好不要修改形参,参见竟然修改形参有这么可怕的后果

形参本身是局部变量,只能在函数内访问:

function foo(a){
    console.log(a);
}

foo(12);   // 12

console.log(a);  // Uncaught ReferenceError: a is not defined

你可以在控制台看到:

比如,你可以这样:

function foo(){
    a='lala';
}

foo();

console.log(a);  // lala

引擎在foo函数的作用域和全局作用域找不到名为a的变量,在非严格模式下就会在全局作用域创建一个名为a的全局变量,此时如果为函数添加名为a的形参就可以

阻止这种事情发生:

function foo(a){
    a='lala';
}

foo();

console.log(a);  // Uncaught ReferenceError: a is not defined

因为引擎已经在函数的作用域内找到了名为a的变量,所以不会在全局作用域创建名为a的全局变量,此时,如果再在函数内声明名为a的变量就已经是重复声明了:

function foo(a){
    var a='lala';
    console.log(a);
}

foo();  // lala

此时JShint等代码检查工具就会警告:

虽然JS的重复声明会被引擎忽略,但不建议这么做。

最后,我真想吐槽博客园的光标,特么的怎么总是莫名其妙跳到别处!害得总是修改原来写好的代码!

以上。

posted @ 2018-04-06 16:18  linweiws  阅读(154)  评论(0编辑  收藏  举报