JS函数面试题1

function add(n) {
n = n+1;
  }
y = add(x); //2

function add(n) {
n = n + 3;
}
z = add(x); //
//问执行完毕后 x, y, z 的值分别是多少?
//x 1
//y undefined
// z undefined
//函数表达式没有return 所以为undefined

2.

function test(a,b){
console.log(a);//function a(){}
console.log(b);//undefined
var b = 234;
console.log(b);//234
a = 123;
console.log(a);//123
function a() {}
var a;
b = 234;
var b = function(){}
console.log(a);//123
console.log(b);//function(){}
}
test(1);
分析:
(1). 创建AO对象(Activition Object)(执行期上下文)
AO{}
(2). 找形参和变量声明,将变量和形参名名作为AO对象的属性名,值是undefined
AO{
a:undefined,
b:undefined,
}
(3). 将实参和形参统一
AO{
a:1,
b:undefined,
}
(4). 在函数体里面找函数声明,值赋予函数体
AO{
a:function a(){},
b:undefined,
}
(5). 执行语句(解释执行(解释一行、执行一行))
AO{
a:123
b:function(){}
}
4.
var y = ‘global’;
function test(x){
console.log(y);
var y = ‘local’;
return y;
}
console.log(test(true));

输出:undefined
local
注意,当test函数中打印y时,变量y只是被声明了,并没有赋值,所以打印出了undefined;
当程序继续向下执行,输出loca

var y = ‘global’;
function test(x){
(function(){
if(x){
var y = ‘local’;
}
})();
return y;
}
console.log(test(true));

输出:global

var y = 'local’这一句中y的作用域是匿名函数,即this指向Windows,故返回全局变量global

alert(a);
a();
var a = 3;
function a(){
alert(10);
}
alert(a);
a = 6;
a();
输出: function(){}
10
3
报错
首先GO{
a:function
}
后面执行语句(解释执行(解释一行、执行一行))
第一个为a的函数体
执行函数 输出 10
此时a赋值为3 输出a为3
此时a赋值为6 a()不为函数 报错

var a = 20;
function test() {
a = 100;
alert(a);
alert(this.a);
var a;
alert(a);
}
test();
输出: 100
20
100
首先这题是一个关于作用域的题目,函数test是a的一个局部作用域,所以第一输出为100
其次就是关于this的指向问题,这时的this指向Windows,所以输出20
8.
var User = {
  count: 1,
  getCount: function () {
    return this.count;
  }
};
console.log(User.getCount()); // 1
var func = User.getCount;
console.log(func()); // undefined
getCount函数被User对象调用,所以this指向的是User,输出1。
func变量接收的是一个函数体:func()执行的时候, this指的是window, 而window中没有count这个属性。 所以,返回的是undefined。

9.var flag = “window”;
var object = {
flag : “local”,
sayFlag: function(){
//返回一个匿名函数
return function(){
alert(this.flag);
}
}
}
object.sayFlag()();//window
分析: 这时候的this指向的是Windows

function fun(n, o) {
console.log(o)
return {
fun: function (m) {
return fun(m, n);
}
};
}
var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1);
c.fun(2);
c.fun(3);
a,b,c分别输出什么?
所以最终输出的结果为:undifine,0,0,0。
undifine,0,1,2。
undifine,0, 1, 1。
首先第一行,先看var a = fun(0),把0传入fun(n,o)中,那么n=0,o=undifine,
而fun(n,o) return了{fun:function(m){returnfun(m,n);}};,
所以a就等于{fun:function(m){return fun(m,0);}};
所以a.fun(1)=function(1){return fun(1,0);}=fun(1,0),所以会输出0,
同样a.fun(2)=function(2){return fun(2,0);}=fun(2,0),输出0,以此类推,a.fun(3)也输出0。
所以最终输出的结果为:undifine,0,0,0。
再看看第二行,fun(0)输出undifine,fun(0).fun(1)=a.fun(1)=fun(1,0)={fun:function(m){return fun(m,1);}};,输出0,
fun(0).fun(1).fun(2)=function(2){return fun(2,1);}=fun(2,1)={fun:function(m){return fun(m,2);}},输出1,
以此类推,fun(0).fun(1).fun(2).fun(3),
最终按次序输出的是:undifine,0,1,2。
最后看第三行,var c = fun(0).fun(1),根据上面两行的推理,输出的是undifine,0。
c={fun:function(m){return fun(m,1);}},c.fun(2)=function(2){return fun(2,1);},输出1,
c.fun(3)=function(3){return fun(3,1);},输出的还是1,所以第三行输出的是:undifine,0, 1, 1。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值