首页 > 编程知识 正文

js原型和原型链面试题,js笔试题

时间:2023-05-05 07:07:25 阅读:48716 作者:3360

闭包问题

functionfun(n,o )控制台. log ) o; return{fun:function(m ) returnfun,n ); }; }vara=fun(0; a.fun(1; a.fun(2); a.fun(3; varb=fun(0).fun (1).fun (2).fun (3); varc=fun(0).fun ) 1; c.fun(2); c.fun(3;三行的a、b、c输出分别是什么? 我觉得有点意思,和大家一起说话。

如果你不太了解JavaScript的闭包,我想你一定不想看这个代码。

是的,我们暂时不要想这个代码,先看看简单的东西吧

function fun0() { var a=1; 控制台. log (a; }function fun1() console.log ) ) a; (}fun0); //1fun1(; 错误报告名为a is not defined的代码。 最后,我想你应该知道为什么结果会误报为1。 函数中声明的变量仅在函数中定义,它们是局部变量,范围是局部的,因此在调用函数fun1后,如果找不到a,则会出现误报。 JavaScript采用词法作用域,函数的执行依赖于变量作用域。 这个作用域

function fun0() { var a=1; 控制台. log (a; 如果将fun1放入fun0中,则function fun1() console.log ) (a ); (} fun1); //1 ) fun0); //1代码进行了这样的变更,只要将fun1放入fun0中就不会报告错误,函数调用后都输出1

现在,让我们来看看最初提到的代码。 先简单点吧

function fun(n,{ return { }} )让我们来看看这段代码。 如果调用了fun会怎么样?

很明显会返回空对象。 记住在fun调用后返回对象很重要。

functionfun(n,o )控制台. log ) o; return{fun:function(m ) returnfun,n ); }; }vara=fun(0; 其中,调用函数时传递的实际参数少于声明函数时指定的形状参数数量,所有其他形状参数都将设置为undefined值。

控制台. log (o; 输出未定义

vara=fun(0; 那a是什么值,fun(0),是回来的对象吗

{fun:function(m ) returnfun,0 ); }此对象具有fun的方法,方法返回的结果是最外面的fun调用的结果。

结果

vara=fun(0)传递参数0。 这意味着函数fun的参数n的值为0,并且返回的对象需要参数n。 如果此对象的范围没有n,则继续沿范围在更高的范围中查找n,最后在函数fun中找到n。 n的值为0。 这个故事是本论文的重点

说到这里,这个问题基本上可以解决,所以我希望你听听我上面说的话,下面的东西很简单。 一步一步地看看吧。

现在我们知道a是

{fun:function(m ) returnfun,0 ); }这样的对象

a.fun(1; 会怎么样? 看代码

{ fun :功能(1)返回fun (1,0 ); }a.fun(1; 返回的结果是fun (1,0 ),返回的结果

函数fun (n,o )/n的值为1,o的值为0 console.log(o ) ); return{fun:function(m ) returnfun,n ); //n的值为1}; ) fun (1,0 ); 输出//0并返回具有fun方法的对象。 调用此对象时,将返回外部fun函数调用的结果。 然后,外侧函数的第二个自变量为n的值,即1a.fun(2); 会怎么样? 看代码

{ fun :功能(2)返回fun (2,0 ); }a.fun(2; 返回的结果是fun (2,0 ),返回的结果

函数fun (n,o )/n的值为2,o的值为0 console.log(o ) ); return{fun:function(m ) returnfun,n ); //n的值为2}; (fun ) 2,0 ); 输出//0,并返回包含fun方法的对象。 调用此对象时,将返回调用外部fun函数的结果。 然后,外侧函数的第二个自变量为n的值,即2a.fun(3); 别说了,一样的。

vara=fun(0; a.fun(1; a.fun(2); a.fun(3; varb=fun(0).fun (1).fun (2).fun (3); 如果将返回的对象再次赋值给a,两行的结果将相同。

varc=fun(0).fun ) 1; c.fun(2); c.fun(3;

c与他们不同,varc=fun(0).fun )1); 之后,我只是用了同样的对象。

说下结果

vara=fun(0; a.fun(1; a.fun(2); a.fun(3; //undefined00varb=fun(0).fun ()1).fun ()2).fun ) ) 3; //undefined012varc=fun(0).fun ) 1; c.fun(2); c.fun(3; //undefined 0 1 1转载自http://www.cn blogs.com/xx canghai/p/4991870.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。