小笔试题
2017-03-01 本文已影响0人
012ca771a446
01
function foo() {
var num = 123;
console.log(num);
}
foo(); //123
console.log(num); //报错---> 无法调用局部变量
02
var scope = "global";
foo();
function foo() {
console.log(scope); //undefined---> 函数内部的变量提升,但是没有定义
var scope = "local";
console.log(scope); //local--->就近原则
}
console.log(scope); //global--->找到的是全局变量
//----------------------------------------------------------分割线 下面是变量提升后的代码:
var scope
function foo() {
var scope;
console.log(scope); //undefined
scope = "local";
console.log(scope); //local
}
scope = "global";
foo();
console.log(scope); //global
```
######03
function f1(){
if("a" in window){
var a = 10;
}
console.log(a); //undefined
}
f1();
//-------------------------------------------------------分割线 变量提升后的代码分析:
function f1(){
var a; //这个a不在window中,因此不进入if语句中
if("a" in window){
a = 10;
}
console.log(a); //打印出来是undefined
}
f1();
#####04
```
if("a" in window){
var a = 10;
}
console.log(a); //10
//-------------------------------------------------------分割线 变量提升后的代码分析:
var a;
if("a" in window){
a = 10//此处a为全局变量 即a为window的属性,符合条件进入if语句
}
console.log(a)//10
```
######05
```
if(!"a" in window){
var a = 10;
}
console.log(a); //? undefined 因为!"a" 无法进入if语句中
```
######06
```
var foo = 1;
function bar() {
if(!foo)
{
var foo = 10;
}
alert(foo); // undefined? 10
}
bar();
//-------------------------------------------------------分割线 变量提升后的代码分析:
var foo;
function bar() {
var foo;
if(!foo)
{
foo = 10;
}
alert(foo); // 10
}
foo = 1;
bar();
```
######07
```
function Foo() {
getName = function(){
console.log("1");
};
return this;
}
Foo.getName = function() {
console.log("2");
};
Foo.prototype.getName = function(){
console.log("3");
};
var getName = function() {
console.log("4");
};
function getName(){
console.log("5");
}
Foo.getName(); // 2
getName(); // 4
Foo().getName(); //1 ? 4 ? 2 ?报错
getName(); // ? 1
new Foo.getName(); // 2
new Foo().getName(); // 3
new new Foo().getName(); // 3
```
######08
```
function Foo() {
this.getName = function(){
console.log(1);
};
return this;
}
var getName = function() {
console.log(2);
};
function getName(){
console.log(3);
}
Foo().getName(); //1
getName(); //1
//注意输出的结果都为1
```
######09
考察变量的提升,和作用域
```
var name = 'World!';
(function () {
if (typeof name === 'undefined') {
var name = '陈奕迅';
console.log('Goodbye ' + name);// Goodbye 陈奕迅;
} else {
console.log('Hello ' + name);
}
})();
```
######10
`console.log(Array.isArray(Array.prototype)); //true`
######11
注意:这里有陷阱`` 所有的数值里0为假,所以结果为flase.如果换成1就为true;
```
var a = [0];
if ([0]) {
//console.log([0] == true);//false
console.log(a == true);//false
} else {
console.log("NO");
}
```
######12
请给出下面代码的输出结果
```
(function(){
var x = y = 1;
})();
console.log(y); //能够获取y的值吗?
console.log(x); //能够获取x的值吗?
```
这个稍微好理解点
```
(function(){
var x;//x是局部变量,外部无法访问
y = 1;//这里y是全局变量
x = y;
})();
console.log(y); //1
console.log(x); //报错
```