this真题编译
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);
x=?y=?z=?
考察点:预编译,有两个函数声明,函数的声明会被提升,所以第二个会把第一个覆盖,故x=1 y=4 z=4
2 下列函数分别输出的是什么?
function foo(x){
console.log(arguments); // 打印实参
return x;
}
foo(1,2,3,4,5);
(function foo(x){
console.log(arguments);
return x;
})(1,2,3,4,5);
function foo(){
bar.apply(null,arguments);//bar(arguments)
};
function bar(){
console.log(arguments);
};
foo(1,2,3,4,5);
3 下面函数会弹出什么?
function b(x,y,a){
arguments[2] = 10;
alert(a)
};
b(1,2,3);
function b(x,y,a){
a = 10;
alert(arguments[2])
};
b(1,2,3);
两个打印的都是10,因为只要存在,形参和实参列表是相互映射一一对应的,形参改变,实参也会随之改变
4 判断下面的类型
var f=(
function f(){
return "1";
},
function g(){
return 2;
}
)();
typeof f ?
首先我们要了解这个括号的意思 例如 var num=(1,2);这时候num就是2,如果var num = 1,2这样则会因为语法错误报错,所以这一题其实就是
function g(){
return 2;
}();
立即执行函数,返回值是2,判断之后则是typeof 2 number
5 判断下面的输出值
var x=1;
if( function f(){} ){ //当判断玩之后能函数消失
x+ = typeof f;这时候函数是undefined
}
console.log(x);
6.判断下面弹出的值
var name="222";
var a={
name:"111",
say:function(){
console.log(this.name);
}
}
var fun = a.say;
fun();
a.say();
var b={
name:"333",
say:function(fun){
fun();
}
};
b.say(a.say); //没人调用,里面指向的还是window
b.say = a.say;
b.say();
7 实现阶乘
方法1 : 函数调用
function Fn(n){
if(n <= 1){
return 1;
}
return n * Fn(n-1);
}
Fn(5);
方法2 : arguments.callee //严格模式下会报错
var num=(function(n){
if(n<=1){
return 1;
}
return n*arguments.callee(n-1);//指向函数本身
}(5))
方法3:for循环
function fn (num) {
if (num < 0) {
return -1;
} else if (num === 0 || num === 1) {
return 1;
} else {
for (var i = num - 1; i >= 1; i--) {
num *= i;
}
}
return num;
};
fn(6);
方法4:while循环
function fn (num) {
var result = num;
if (num < 0) {
return -1;
} else if (num === 0 || num === 1) {
return 1;
} else {
while (num > 1) {
num--;
result *= num;
}
}
return result;
};
fn(6);
8.
var foo="123";
function print(){
var foo="456";
this.foo = "789";
console.log(foo)
}
print();
var foo="123";
function print(){
this.foo = "789";
console.log(foo)
}
print();//789
var foo="123";
function print(){
this.foo = "789";
console.log(foo)
}
new print();
9.下面运行test()和new test()分别弹出什么?
var a=5;
function test(){
a=0;
alert(a);
alert(this.a)
var a;
alert(a)
}
test();
new test();
new一个对象的意思是啥?
function test(){
var this = {
__proto__:test.prototype;
}//this上没有a 所以是undefined
或者是
var this = Object.creat(test.prototype)
}
10.
var bar={ a : 001};
function print(){
bar.a = 'a';
Object.prototype.b = 'b''
return function inner(){
console.log(bar.a);
console.log(bar.b);
}
}
print()();//第一个括号执行return 第二个括号执行return里面的函数