慢慢收集一些习题、考题
练习1
问:X,Y,Z分别是多少?
var x = 1, y=z=0;
function add(n){
return n = n+1;
}
y = add(x);
function add(n){
return n = n+3;
}
z = add(x);
console.log(x); // 1
console.log(y); // 4
console.log(z); // 4
分析:考预编译的
变量提升、函数提升,同名函数覆盖;只会执行后一个函数 n = n+3 ;
练习2
问:哪些结果能输出 12345
function foo(){
bar.apply(null,arguments);
}
function bar(){
console.log(arguments);
}
foo(1,2,3,4,5); // [1,2,3,4,5]
分析:理解 apply
apply 第一个参数改变 this 指向,这里面也没有 this ,所以 null 是什么也不做。 第二个参数把5个参数传进去。所以 foo 相当于直接执行 bar ,所以 arguments 就是结果: 12345.
(function foo(x){
console.log(arguments);
return x
})(1,2,3,4,5) // [1,2,3,4,5]
分析:理解立即执行函数
立即执行的标准写法,参数传入,输出 arguments ,还返回这些参数。
function foo(x){
console.log(arguments);
return x;
}
foo(1,2,3,4,5); // [1,2,3,4,5]
分析:函数标准调用,直接输出 arguments
function foo(x){
console.log(arguments);
return x;
}(1,2,3,4,5)
分析:函数不能执行,也不会报错,(1,2,3,4,5)当表达式处理了。
练习3
问:以下表达式结果
parseInt(3,8); // 3
parseInt(3,2); // NaN
parseInt(3,0); // 3 或 NaN
分析:parseInt 第二个参数,二进制和八进制。
parseInt(3,8); 把3看成是八进制里的3, 输出还是3;
parseInt(3,2); 把3看成是二进制里的3,二进制里没有3,NaN;
parseInt(3,0); 没有0进制,一般浏览器会当十进制输出,即3;也有浏览器输出 NaN;
二进制: 0,1; 二进制里的2用 10表示;
八进制:0,1,2,3,4,5,6,7;八进制里的8用10表示;
十六进制: 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f; 十六进制里的16用10表示;
练习4
问:以下哪些是typeof可有返回的结果
string // 可以
array
object // 可以
null
分析: typeof 返回结果有哪些?
7 种。分别为: string、boolean、number、Object、Function、undefined、symbol(ES6)
练习5
问:alert 的结果?
function b(x,y,a){
arguments[2] = 10;
alert(a); // 10
}
b(1,2,3);
分析:arguments 和 实参的映射关系,实参传进去,a = 3 , 先定义了 arguments[2] =10 那就等于改变了 a 的值。 所以输出 10 。
function b(x,y,a){
a = 10;
alert(arguments[2]); // 10
}
b(1,2,3);
分析:实参、形参和 arguments 是映射关系,你变我也变;除非没对应上; 所以输出 10;
注意,形参和arguments虽是映射关系,但不是一个人;
练习6
问:输出结果
var f=(
function f(){
return "1";
},
function g(){
return 2;
}
)();
typeof f; // number
分析:“,” 逗号操作符; (1,2) 的结果就是返回2。但要用括号括起来。那么返回结果相当于是:
var f=(
function g(){
return 2;
}
)();
这又变成立即执行函数了,返回2,所以 f = 2; typeof f 输出 number;
练习7
问:执行结果
var x = 1;
fi(function f(){}){
x+= typeof f;
}
console.log(x); // 1undefined
分析:(function f()) 的特性是变成表达式后就执行了,执行后失去引用,就找不到了。
typeof f 的结果就变成: undefiend 了。typeof 输出的结果都是字符串类型;那么 1 + 'undefined
' 就是 1undefined
练习8
问:表达式结果为true的是:
undefined == null // true
undefined === null // false
isNaN("100") // fasle
parseInt("1a") == 1; // true
分析,undefined 和 null 很特殊,有些只有硬记,看后面图。
isNaN(), 函数里面的数是要经过 Number() 隐式转换后再判断是不是“非数”的。 Number("100") = 100,数值类型的,所以 isNaN(100) == false。
parseInt("1a") 是把字符串中的有效数字提出,转换成数值型。结果是 1 。
看下控制台:
标签:练习题,function,return,log,10,javascript,arguments,foo,若干 From: https://blog.51cto.com/ahuiok/5818460