源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 53|回复: 30

[JavaScript] Javascript中的函数声明与函数表达式(奇技淫巧)

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2011-3-6 22:13:14 | 显示全部楼层 |阅读模式
Javascript有很多有趣的用法,在Google Code Search里能找到不少,今天从火丁笔记看到的,非常不错,推荐大家看下。 举一个例子:

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
试一下就知道这段代码的意思就是声明一个函数,然后立刻执行,因为Javascript中的变量作用域是基于函数的,所以这样可以避免变量污染,但这里的位运算符“~”乍一看让人摸不到头脑,如果去掉它再运行则会报错:SyntaxError。

在阐述为什么之前,让我们先来明确Javascript中的两个概念:函数声明和函数表达式:

先来看看什么样的是函数声明:

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
再来看看什么样的是函数表达式:

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
现在回头看看文章开头的问题,为什么去掉位操作符“~”后运行会报错,这是因为从语法解析的角度看,Javascript不允许在函数声明的后面直接使用小括号,而函数表达式则没有这个限制,通过在函数声明前面加上一个“~”操作符,就可以让语法解析器把后面看成是函数表达式,同样的,在函数声明前面加上“!,+,-”等操作符也是可行的。

那我们为什么不使用下面这种函数表达式的方式呢?


[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
虽然从语法解析的角度看没有问题,但是上面的代码存在弊端,它引入了一个变量,可能会污染现有的运行环境,带来潜在的问题。

使用位操作符“~”的方法多少显得有点奇技淫巧,其实把函数声明用小括号套起来更易读:


[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
弄明白了原理,不管遇到什么写法,都不会再丈二和尚摸不着头脑了。
回复

使用道具 举报

11

主题

2万

回帖

300

积分

中级会员

Rank: 3Rank: 3

积分
300
发表于 2022-9-2 04:35:54 | 显示全部楼层
啪啪啪生怕PSP怕
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2022-10-28 13:33:38 | 显示全部楼层
怕怕怕怕怕怕怕怕怕怕怕怕怕怕
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

59

积分

注册会员

Rank: 2

积分
59
发表于 2022-12-8 19:12:08 | 显示全部楼层
不错的源码论坛
回复 支持 反对

使用道具 举报

4

主题

2万

回帖

316

积分

中级会员

Rank: 3Rank: 3

积分
316
发表于 2023-5-5 04:44:10 | 显示全部楼层
来看看怎么样
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-8-27 20:43:47 | 显示全部楼层
有什么好的服务器
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

124

积分

注册会员

Rank: 2

积分
124
发表于 2023-9-8 16:41:35 | 显示全部楼层
。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

87

积分

注册会员

Rank: 2

积分
87
发表于 2023-10-8 10:45:52 | 显示全部楼层
8888888888888888
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2024-3-7 02:53:48 | 显示全部楼层
2222222222222222
回复 支持 反对

使用道具 举报

13

主题

2万

回帖

97

积分

注册会员

Rank: 2

积分
97
发表于 2024-3-15 07:38:04 | 显示全部楼层
来看看!!!
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2024-11-24 04:51 , Processed in 0.068667 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表