javascript变量作用域使用中常见错误总结变量作用域使用中常见错误总结
刚看了一篇文章对js作用域的理解又会上升到一个新的台阶,javascript里变量作用域是个经常让人头痛抓狂的
问题,接下来对经常遇到又容易出错的情况进行了简单总结,感兴趣的各位可以参考下哈
今天在rainweb的博客上,看到了这篇非常好的文章,觉得非常有必要分享出来,相信大家认真读完这篇文章,对js作用域的
理解又会上升到一个新的台阶。
前言:javascript里变量作用域是个经常让人头痛抓狂的问题,下面通过10++个题目,对经常遇到又容易出错的情况进行了简
单总结,代码样例很短很简单
题目一
复制代码 代码如下:
var name = 'casper'; alert(name); //毫无疑问地输出:casper
题目二
复制代码 代码如下:
alert(name); //报错:对象未定义,即使用一个压根就不存在的变量,所以出错
age = 24; //这里木有错,但age不是为定义吗?翻下犀牛书,明白了 //给一个未定义的变量赋值,会创建一个全局变量,相当
于:var age = 24
题目三
复制代码 代码如下:
alert(name); //name下面才定义,这里肯定报错了吧?错!这里弹出:undefined
var name = 'casper';
解释:javascript代码在解析的时候,都会搜索下var声明的变量,并将其声明提前,实际的过程如下:
复制代码 代码如下:
var name; //光声明name变量,但未赋值,所以为此时为:undefined
alert(name); name = 'casper';
题目四
复制代码 代码如下:
var name = 'casper';
function show(){
alert(name);
name = 'hello'; //全局变量name的值改为'hello'
}
show(); //输出:casper
题目五
复制代码 代码如下:
var name = 'casper';
function show(){ alert(name); //输出:undefined,是不是有想死的心
var name = 'hello'; //注意:与题目四相比,此处name前多了个var,
} show();
解释:在函数show中,name是个局部变量,题目三的原理同样适用于此,即函数show内部实际为
(小知识点补充:当函数内部存在与外部全局变量同名的局部变量,优先使用局部变量,此处为name)
function show(){ var name; alert(name); name = 'hello'; }
题目六
复制代码 代码如下:
var list = [1,2,3];
function show(){ if(typeof list === 'undefined')
{ list = []; }
alert(list.length);
};
show(); //结果:3,是不是一目了然= =,稍等,请接着看第七题
评论0
最新资源