Javascript中的函数声明和函数表达式
发布人:一全科技 来源:火丁笔记 发布于:2011-03-07 22:25:40 浏览:917

辽宁12选5走势图表 www.jc1o.cn Javascript有很多有趣的用法,在Google Code Search里能找到不少,举一个例子:

<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>

弄明白了原理,不管遇到什么写法,都不会再丈二和尚摸不着头脑了。

  • 为什么说一直辛苦劳作的农民没有富起来?而不说一直勤劳的农民没有富起来? 2019-06-15
  • 刘红:关注乳腺健康 做好体检预防工作 2019-06-11
  • 中国伊斯兰教协会“四进”清真寺活动启动 2019-06-05
  • 我国社会组织正成为全球治理体系中的新生力量 2019-06-05
  • 林肯全新Navigator领航员正式上市 售112.80万元起 2019-05-27
  • “川商走进新经济”第一场活动落幕 2019-05-14
  • 还加上制裁伊朗引起价格飙升的石油战 2019-05-14
  • 青海:52个客运站卫生间将全面改造 2019-05-12
  • 依规治党和依法治国结合的典范 2019-05-12
  • 内蒙古水利厅厅长付万惠接受纪律审查和监察调查 2019-05-11
  • 传销就是利用这种劣根性。 2019-05-08
  • 女性之声——全国妇联 2019-04-22
  • 不忘初心继续前进——七集政论专题片 2019-04-21
  • 百姓故事:摔跤吧!女孩 2019-04-16
  • 一条塔里木河 串起南疆各色景致与无限风光 2019-04-16
  • 河北十一选五和直遗漏 中国体彩宁夏十一选五 足彩总进球数二三球 彩票网下载app 广西快乐十分玩法技巧 广东十一选五彩经网 安徽11选5开奖走势 2019双色球规律公式 公共娱乐场所不允许设置在建筑内 六肖中特准免费 黄大仙 福建22选518197期开奖结果 极速11选5是私彩吗 p3试机号历史上的今天 北京幸运28属于诈骗吗 冰球比分