JS基本问题
2016-12-08 08:34
113 查看
问题1:Scope作用范围
考虑下面的代码
(function(){
var a=b=5;
})();
console.log(b);
什么会被打印到控制台上?
回答:上面代码会打印5.
诀窍:这里有两个变量声明,但a使用关键字var声明的,代表它是一个函数的局部变量.与此相反,b变成了全局变量.
诀窍:它没有启用严格模式,代码会引发ReferenceError的错误,b没有定义(b is not defined).请记住,严格模式,则需要明确指定,才能实现全局变量声明.比如,你应该写:
(function(){
"use strict";
var a=window.b=5;
})();
console.log(b);
2.问题2.声明提升
执行这段代码,输出什么结果.
function test(){
console.log(a);
console.log(foo());
var a=1;
function foo(){
return 2;
}
}
回答:这段代码的结果是undefined和2.
原因是,变量和函数的声明都被提前了(移到了函数的顶部),但变量不分配任何值.因此,在打印变量的时候,它在函数中存在(它被声明了),但它仍然是undefined.换句话说,上面的代码等同于以下内容:
function test(){
var a;
function foo(){
return 2;
}
console.log(a);
console.log(foo());
a=1;
}
test();
考虑下面的代码
(function(){
var a=b=5;
})();
console.log(b);
什么会被打印到控制台上?
回答:上面代码会打印5.
诀窍:这里有两个变量声明,但a使用关键字var声明的,代表它是一个函数的局部变量.与此相反,b变成了全局变量.
诀窍:它没有启用严格模式,代码会引发ReferenceError的错误,b没有定义(b is not defined).请记住,严格模式,则需要明确指定,才能实现全局变量声明.比如,你应该写:
(function(){
"use strict";
var a=window.b=5;
})();
console.log(b);
2.问题2.声明提升
执行这段代码,输出什么结果.
function test(){
console.log(a);
console.log(foo());
var a=1;
function foo(){
return 2;
}
}
回答:这段代码的结果是undefined和2.
原因是,变量和函数的声明都被提前了(移到了函数的顶部),但变量不分配任何值.因此,在打印变量的时候,它在函数中存在(它被声明了),但它仍然是undefined.换句话说,上面的代码等同于以下内容:
function test(){
var a;
function foo(){
return 2;
}
console.log(a);
console.log(foo());
a=1;
}
test();
相关文章推荐
- github+hexo+node.js搭建个人博客基本过程及遇到的问题
- 解决js跨域问题的基本方法之 -------JSONP
- DOM的基本方法与IE和FF的JS兼容问题
- js 函数传递参数类型问题(基本类型和引用类型)
- js 基本运算小数精度解决问题
- github+hexo+node.js搭建个人博客基本过程及遇到的问题
- WKWebView 基本使用及与JS交互,以及低版本系统崩溃问题解决
- 经验分享 | 10 个最基本的JS面试问题及答案
- js特效+一些基本问题++CSS3
- github+hexo+node.js搭建个人博客基本过程及遇到的问题
- 在struts开发中使用validator验证时应该注意的基本问题
- C语言程序设计的一些基本问题
- C语言测试:想成为嵌入式程序员应知道的0x10个基本问题
- js一些常见的问题与解决代码(转自www.51js.com)
- 摘之网上,两个很基本的问题的解答。
- Oracle 基本知识及问题解决
- js一些常见的问题与解决代码(2)(转自www.51js.com)
- 在用户控件中撰写JS时控件的客户端ID问题
- 有关中文转码的几个基本问题
- JS的一些基本語法