* 函数声明和函数表达式的区别
- 函数声明:使用Function关键字声明函数,函数声明前置,无论执行语句的位置在何处都可以任意使用该函数
- 函数表达式: 通过赋值来声明函数,调用该函数表达式要放在其之后
* 什么是变量的声明前置?什么是函数的声明前置
console.log(a)->undefined
var a=1;
console.log(a)->1
* 正确的执性顺序是
var a;
console.log(a)->undefined
在赋值 a=1;
函数声明前置: 当以函数声明的方式调用时,代码执行前会先生成函数,所以既可以在函数前或者在函数后调用都可以
* arguments 是什么
Es5里 是一个类数组 可以argument.length来获取‘参数’的个数;但不能真正当数组来用
* 函数的"重载"怎样实现
ECMAScript不能通过接受不同的参数类型和数量来实现传统意义上的重载,因为同名函数会被覆盖,在js中可以判断参数的个数来模拟重载
* 立即执行函数表达式是什么?有什么作用
(function(){})()
与上下文保持独立,不污染全局
* 求n!,用递归来实现
function recursion(n){
if(n==1){
return 1;
}else{
return n*recursion(n-1)
}
}
* 以下代码输出什么?
'name:','饥人谷'
'age':2
'sex':'男'
['饥人谷',2,'男']
'name':'valley'
'name:','小谷'
'age':3
'sex':undefined
['小谷',2]
'name':'valley'
'name:','男'
'age':undefined
'sex':undefined
['男']
'name':'valley'
* 8. 写一个函数,返回参数的平方和?
<script>
function sumOfSquares(){
var str=0;
for(var i=0; i<arguments.length; i++){
str += Math.pow(arguments[i], 2);
}
return str;
}
var result = sumOfSquares(1,2);
var result2 = sumOfSquares(1,3);
console.log(result);
console.log(result2);
</script>
* 9. 如下代码的输出?为什么
- a->undefined 声明提升还没有赋值,执行到那一步时还没赋值操作
- b->b is not undefined b没有声明
* 10. 如下代码的输出?为什么
- 'hello','world' 是一个函数,
- 变量提升但没赋值 var sayAge=undefined;然后当函数执行的时候会报错 sayAge is not function
* 11. 如下代码输出什么? 写出作用域链查找过程伪代码
- 10
globalContext={
OA:{
x:10,
foo:function(){},
bar:function(){}
},
Scope: null
}
fooContext={
OA:{
},
Scope: globalContext.OA
}
barContext={
OA:{
X:30
},
Scope: globalContext.OA
}
* 12. 如下代码输出什么? 写出作用域链查找过程伪代码
console.log(x)->30
globalContext={
OA:{
x:10,
bar:function(){}
}
}
fooContext={
OA:{
},
Scope: globalContext.bar
}
* 14. 以下代码输出什么? 写出作用域链查找过程伪代码
globalContext={
OA:{
a: 200,
fn:function(){},
fn3:functon(){}
}
Scope: null
}
fn3Context={
OA:{
},
Scope: globalContext.OA
}
fnContext={
OA:{
a:20,
fn2:function(){}
},
Scope: globalContext.OA
}
fn2Context={
OA:{
},
Scope: globalContext.fn
}
undefined
5
1
6
20
200