JS中超越现实的匿名函数用法实例分析


Posted in Javascript onJune 21, 2019

本文实例讲述了JS中超越现实的匿名函数用法。分享给大家供大家参考,具体如下:

一般函数:

function show1(name){
    alert(name); //打印:zhangsan
  }
show1("zhangsan");

匿名函数:

var show2 = function (name) {
    alert(name); //打印:张三
  }
show2("张三");

上面2种定义函数的区别:

1.我们知道所有的function都会在window对象里

function show1(name){
    alert(name); //打印:张三
  }
  window.show1("张三");

即使在函数定义之前调用

window.show1("张三");
  function show1(name){
    alert(name); //打印:张三
  }

这是因为这种”有名字”的函数在JS引擎初始化的时候就加载到作用域里面

2.如果是匿名函数

window.show2("李四");
  var show2 = function (name) {
    alert(name); //打印:李四
  }

控制台会打印:TypeError: window.show2 is not a function

二、如果我们需要合并上面2个函数

<script>
  function show(name) {
    return function () {
      alert(name); //内部函数是可以调用外层的变量的
    }
  }
  show("王五");
</script>

猜猜会打印什么?什么也没有,也不会报错。这是因为执行show()只是返回了一个函数本身,并没有执行这个函数。

show("王五")();

这样执行,就打印:王五

如果里面的函数也要传入变量

<script>
  function show(name) {
    return function (age) {
      alert(name); //打印:王五
      alert(age); //打印:18
    }
  }
  show("王五")(18);
</script>
<script>
  function show(name) {
    return function (name) {
      alert(name);
    }
  }
  show("王五")(18);
</script>

猜猜是打印“王五”还是“18”?只会打印“18”。

三、匿名函数的自执行

<script>
  (function (name) {
    alert(name);  //打印:哈哈
  })("哈哈")
</script>

以上是推荐的写法。

其他写法:

-function (name) {
    alert(name);  //打印:哈哈
  }("哈哈")
+function (name) {
    alert(name);  //打印:哈哈
  }("哈哈")
!function (name) {
    alert(name);  //打印:哈哈
  }("哈哈")
[function (name) {
    alert(name);  //打印:哈哈
  }("哈哈")]
new function (name) {
    alert(name);  //打印:哈哈
  }("哈哈")
~function (name) {
    alert(name);  //打印:哈哈
  }("哈哈")
void function (name) {
    alert(name);  //打印:哈哈
  }("哈哈")

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js面向对象之静态方法和静态属性实例分析
Jan 10 Javascript
浅析JavaScript动画
Jun 10 Javascript
js模仿php中strtotime()与date()函数实现方法
Aug 11 Javascript
js变形金刚文字特效代码分享
Aug 20 Javascript
js实现C#的StringBuilder效果完整实例
Dec 22 Javascript
原生javascript实现addClass,removeClass,hasClass函数
Feb 25 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
Mar 01 Javascript
jQuery无刷新上传之uploadify简单代码
Jan 17 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
Jul 19 jQuery
vuejs 制作背景淡入淡出切换动画的实例
Sep 01 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
May 24 Javascript
原生js添加一个或多个类名的方法分析
Jul 30 Javascript
微信小程序实现圆形进度条动画
Nov 18 #Javascript
JavaScript迭代器的含义及用法
Jun 21 #Javascript
js事件触发操作实例分析
Jun 21 #Javascript
微信小程序实现下拉刷新动画
Jun 21 #Javascript
vue elementUI使用tabs与导航栏联动
Jun 21 #Javascript
Ajax请求时无法重定向的问题解决代码详解
Jun 21 #Javascript
vue配置文件实现代理v2版本的方法
Jun 21 #Javascript
You might like
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
python 读取串口数据的示例
2020/11/09 Python
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
Java的五个基础面试题
2016/02/26 面试题
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
寒假家长评语大全
2014/04/16 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
军训口号
2014/06/13 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
民主评议党员个人总结
2015/02/13 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
检举信的写法
2019/04/10 职场文书
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python
详解MySQL中的pid与socket
2021/06/15 MySQL
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫