Javascript中的函数声明与函数表达式(奇技淫巧)
发布时间:2024-04-23 09:08:43
标签:函数声明,函数表达式
举一个例子:
<script> ~function() { alert("hello, world."); }(); </script>
试一下就知道这段代码的意思就是声明一个函数,然后立刻执行,因为Javascript中的变量作用域是基于函数的,所以这样可以避免变量污染,但这里的位运算符“~”乍一看让人摸不到头脑,如果去掉它再运行则会报错:SyntaxError。
在阐述为什么之前,让我们先来明确Javascript中的两个概念:函数声明和函数表达式:
先来看看什么样的是函数声明:
<script> function() { alert("hello, world."); }; function foo() { alert("hello, world."); }; </script>
再来看看什么样的是函数表达式:
<script> var foo = function() { alert("hello, world."); }; </script>
现在回头看看文章开头的问题,为什么去掉位操作符“~”后运行会报错,这是因为从语法解析的角度看,Javascript不允许在函数声明的后面直接使用小括号,而函数表达式则没有这个限制,通过在函数声明前面加上一个“~”操作符,就可以让语法解析器把后面看成是函数表达式,同样的,在函数声明前面加上“!,+,-”等操作符也是可行的。
那我们为什么不使用下面这种函数表达式的方式呢?
<script> var foo = function() { alert("hello, world."); }(); </script>
虽然从语法解析的角度看没有问题,但是上面的代码存在弊端,它引入了一个变量,可能会污染现有的运行环境,带来潜在的问题。
使用位操作符“~”的方法多少显得有点奇技淫巧,其实把函数声明用小括号套起来更易读:
<script> (function() { alert("hello, world."); })(); </script>
弄明白了原理,不管遇到什么写法,都不会再丈二和尚摸不着头脑了。
0
投稿
猜你喜欢
- //匹配中文 数字 字母 下划线 var checkIn
- 将datetime64[ns]转为字符串日期将datetime64[ns]转为字符串日期(“%Y-%m-%d&r
- 一、需要识别的内容需要识别的验证码内容如下 验证码下载下载地址。二、直接调用tesseract来完成识别(识别率很差)
- 本文实例讲述了Python实现阿拉伯数字和罗马数字的互相转换功能。分享给大家供大家参考,具体如下:前面一篇介绍了《Java实现的求解经典罗马
- 在python命令行模式下,在IDLE中输入多行,例如if else使用tab的方式,控制缩进在最后,连续两个回车,表示结束&g
- 反向传递法则是深度学习中最为重要的一部分,torch中的backward可以对计算图中的梯度进行计算和累积这里通过一段程序来演示基本的bac
- 线性回归在整个财务中广泛应用于众多应用程序中。在之前的教程中,我们使用普通最小二乘法(OLS)计算了公司的beta与相对索引的比较。现在,我
- 这篇文章主要介绍了python多进程并行代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以
- 我们有时候,看到几k的日志文件,一大堆,一个一个打开又很麻烦,少看几个,又担心遗漏,这个时候,如果有一个可以合并所有文本文件的工具就好了。下
- pandas.read_csv参数整理 读取CSV(逗号分割)文件到DataFrame也支持文件的部分导入和选择迭代更多帮助参见:
- 目录logging的简单使用|2logging常见对象|3logging基本使用|4logging之Formatter对象|5logging
- 本文实例讲述了Python3搜索及替换文件中文本的方法。分享给大家供大家参考。具体实现方法如下:# 将文件中的某个字符串改变成另一个 # 下
- 在官方网站中对as_index有以下介绍:as_index : boolean, default TrueFor aggregated ou
- 代码如下: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%&
- 初级画心学Python,感觉你们的都好复杂,那我来个简单的,我是直接把心形看作是一个正方形+两个半圆:于是这就很简单了,十行代码解决:imp
- 1、运用re、json、jsonpath包解析json思路(1)re:正则表达式,通过json的形式对症下药,写表达式去解析json;(2)
- XML有很多相关的技术,将这些技术结合起来,才能充分发挥XML的强大功能。这些技术包括:Xlink与Xpointer(设置XML的超链接)、
- Flask框架是Python开发的一个基于Werkzeug和Jinja 2的web开发微框架,它的优势就是极其简洁, 但又非常灵活,而且容易
- 使用的技术有jquery.form.js框架, 以及springmvc框架。主要实现异步文件上传的同时封装对象,以及一些注意事项。功能本身是
- Atom是一款功能强大的跨平台编辑器,插件化的解决方案为atom社区的繁荣奠定了基础。任何人都可以把自己做的组件贡献在github上,并能方