JS作用域链&引用类型
2018-07-29 本文已影响2人
小7丁
一、立即执行函数表达式是什么?有什么作用?
(function(){ /* code */ }());
(function(){ /* code */ })();
- 上面这种写法就是立即执行函数表达式。以圆括号开头,js就会认为这是一个表达式,而不是函数定义语句,所以就避免了错误。
- 为什么要用立即执行函数表达式?有时候我们需要在定义函数之后,立即应用函数。而因为function出现在行首一律解释成语句,即然是函数的定义,就不能够以圆括号结尾。所以用圆括号开头就可以使其变成一个表达式, 而避免错误。
一是不必为函数命名,避免了污染全局变量;
二是函数内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。
二、求n!,用递归来实现。
function factorial(n){
if(n === 0) {
return 1
}
if(n === 1){
return 1
}
return n * factorial(n - 1)
}
factorial(3)
三、写一个函数,返回参数的平方和?
function sumOfSquares(){
var result = 0
for(var i=0; i<arguments.length; i++ ){
result += arguments[i]*arguments[i]
}
return result
}
var result = sumOfSquares(2,3,4)
var result2 = sumOfSquares(1,3)
console.log(result) //29
console.log(result2) //10
四、如下代码的输出?为什么?
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
console.log(obj1 = obj2);
console.log(obj1 == obj2);
false//因为obj1和obj2所指向的地址不相同
{a : 1,b :2}//将obj2赋值给obj1
true//由于上一步赋值,现在两个的地址相同