博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript高级知识分析——函数访问
阅读量:5050 次
发布时间:2019-06-12

本文共 1434 字,大约阅读时间需要 4 分钟。

代码信息来自于http://ejohn.org/apps/learn/。

可以通过函数的名字在它的内部引用它。

function yell(n){   return n > 0 ? yell(n-1) + "a" : "hiy"; } console.log( yell(4) === "hiyaaaa", "在函数的内部通过它的名字访问它自己" );

当不通过命名函数来声明时,在其内部如何调用自己?

var ninja = {   yell: function(n){     return n > 0 ? arguments.callee(n-1) + "a" : "hiy";   } }; console.log( ninja.yell(4) == "hiyaaaa", "arguments.callee 指的是函数自己" );

函数的名字作用域失效。

var ninja = function myNinja(){   console.log( ninja === myNinja, "这个函数的引用和名字是同一个函数" ); }; ninja(); console.log( typeof myNinja === "undefined", "但在函数外面不可以访问" ); console.log( ninja );//function myNinja()

注意,当我们使用命名函数声明再分配给一个变量时,这个函数的名字在内部可以引用,外部却不可以。而分配的变量都可以引用。

当匿名函数为一个对象的属性时,也可以调用它。

var ninja = {   yell: function(n){     return n > 0 ? ninja.yell(n-1) + "a" : "hiy";   } }; console.log( ninja.yell(4) === "hiyaaaa");//true

通过这个对象的属性,我们可以调用它。

当移除原对象时,会发生什么情况?

var ninja = {   yell: function(n){     return n > 0 ? ninja.yell(n-1) + "a" : "hiy";   } }; console.log( ninja.yell(4) == "hiyaaaa"); //true var samurai = { yell: ninja.yell }; var ninja = null;  try {   samurai.yell(4); } catch(e){   console.log( "不可以访问啦" ); }

同样的情况,但当我们给匿名函数一个名字时又会?

var ninja = {   yell: function yell(n){     return n > 0 ? yell(n-1) + "a" : "hiy";   } }; console.log( ninja.yell(4) == "hiyaaaa");  var samurai = { yell: ninja.yell }; var ninja = null; console.log( samurai.yell(4) == "hiyaaaa", "注意,它仍然可以调用这个函数" );

 

转载于:https://www.cnblogs.com/winderby/p/4063279.html

你可能感兴趣的文章
RijndaelManaged 加密
查看>>
Android 音量调节
查看>>
windows上面链接使用linux上面的docker daemon
查看>>
Redis事务
查看>>
Web框架和Django基础
查看>>
python中的逻辑操作符
查看>>
HDU 1548 A strange lift (Dijkstra)
查看>>
每天一个小程序—0005题(批量处理图片大小)
查看>>
JavaScript特效源码(3、菜单特效)
查看>>
Linux常用命令总结
查看>>
yii模型ar中备忘
查看>>
C#线程入门
查看>>
CSS清除浮动方法
查看>>
JVM内存回收机制简述
查看>>
洛咕 P2480 [SDOI2010]古代猪文
查看>>
js-创建对象的几种方式
查看>>
JDK JRE Java虚拟机的关系
查看>>
2018.11.20
查看>>
word20161215
查看>>
12th week blog
查看>>