1.函数声明和函数表达式有什么区别?
(1)函数声明:
<script>
function() {
alert("hello, world.");
};
</script>
(2)函数表达式:
<script>
var foo = function() {
alert("hello, world.");
};
</script>
区别:
类似于var声明,函数声明可以提升到其他代码之前,但函数表达式不能提到其他代码之前,但它允许保留在本地变量范围内。
2.什么是声明前置?
在JS中,function和var会被提升,将声明移至作用域scope(全局域或者当前函数作用域)顶部。
3.求n!,用递归来实现
<script type="text/javascript">
function f(n){
if(n == 1){
return 1;
}
else{
return n*f(n-1);
}
}
</script>
4.什么是立即执行的函数表达式?有什么作用?
(1)
立即执行函数(Immediately-Invoked Function Expression),简称IIFE。主要有2种写法:
(function(){
...
})();
(function(){
...
}());
(2)
通常情况下,只对匿名函数使用这种“立即执行的函数表达式”。它的目的有两个:
- 一是不必为函数命名,避免了污染全局变量;
- 二是IIFE内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。
第5题
输出:10
作用域链查找过程伪代码:
/*
1.globalContext = {
AO: {
x: 10
foo: function(){}
bar: function(){}
}
}
bar.[[scope]] = globalContext.AO
foo.[[scope]] = globalContext.AO
2.barContext = {
AO: {
x: 30
foo: function(){}
},
Scope: bar.[[scope]] = globalContext.AO
}
3.fooContext = {
AO: {}
Scope: foo.[[scope]] = globalContext.AO
}
*/
第6题
输出:30
作用域链查找过程伪代码:
/*
1.globalContext = {
AO:{
x: 10
bar: function(){}
}
}
bar.[[scope]] = glocalContext.AO
2.barContext = {
AO: {
x: 30
foo: function(){}
}
Scope: bar.[[scope]] = glocalContext.AO
}
foo.[[scope]] = barContext.AO
3.fooContext = {
AO: {}
Scope: foo.[[scope]] = barContext.AO
}
*/
第7题
输出:30
作用域链查找过程伪代码:
/*
1.globalContext = {
AO: {
x: 10
bar: function(){}
}
}
bar.[[scope]] = globalContext.AO
2.barContext = {
AO: {
x: 30
function()
}
bar.[[scope]] = globalContext.AO
}
function().[[scope]] = barContext.AO
3.function = {
AO: {}
function().[[scope]] = barContext.AO
}
*/
第8题
输出: undeifned 5 1 6 20 200
作用域链查找过程伪代码:
/*
1.globalContext = {
AO: {
a: 1
fn: function(){}
fn3: function(){}
}
}
fn.[[scope]] = globalContext.AO
fn3.[[scope]] = globalContext.AO
2.fnContext = {
AO: {
a: undefined
fn2: function(){}
}
Scope: globalContext.AO
}
fn2.[[scope]] = fnContext.AO
3.fn3Context = {
AO: {}
scope: globalContext.AO
}
4.fn2Context = {
AO:{}
Scope: fnContext.AO
}
*/
第9题
输出:2 2 3
明白了第一个foo()和bar()不是一个作用域,二者并不影响,所以第一个foo()和bar()输出的值是一样的,都输出2。
文章著作权归饥人谷_Ricky和饥人谷所有,转载须说明来源
网友评论