小tips:JS严格模式(use strict)下不能使用arg…
2018-06-24 00:11:29来源:未知 阅读 ()
在函数内部,有两个特殊的对象:arguments 和 this。其中, arguments 的主要用途是保存函数参数, 但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。
如下,一般在非严格模式下递归调用一般这样使用:
function factorial(num){ if(num<=1){ return 1; }else { return num * arguments.callee(num-1); } } console.log(factorial(4)); //24
但是如果代码是在严格模式下开发:
"use strict"; function factorial(num){ if(num<=1){ return 1; }else { return num * arguments.callee(num-1); } } console.log(factorial(4));
结果:Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
在严格模式下不能通过脚本访问arguments.callee
,访问这个属性会报错,那么可以使用命名函数表达式来达到相同的结果:
"use strict"; var factorial = (function f(num){ if(num<=1){ return 1; }else { return num * f(num-1); } }) console.log(factorial(4)); //24
以上代码创建了一个名为f()的命名函数表达式,然后将它赋值给变量factorial
,即是把函数赋值给另外一个变量,函数的名字仍然有效。
在看一段代码:
(function foo(bar) { if (bar) { return; } foo(true); })();
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- javascript设计模式 接口介绍 2019-09-23
- 前端笔记之微信小程序(二){{}}插值和MVVM模式&数 2019-08-14
- [Vue 牛刀小试]:第十五章 - 传统开发模式下的 axios 使用入 2019-08-14
- [JS设计模式]:观察者模式(即发布-订阅者模式)(4) 2019-08-14
- vue history 模式打包部署在域名的二级目录的配置指南 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash