js


原文链接: js

JavaScript - IT笔录
function与感叹号

如何一个页面A点了下 另外一个页面B自动加数据?

html5 postMessage解决跨域、跨窗口消息传递 ,在两个网页间传递数据 window.postMessage

点此刷新

请刷新此页

javascript里!function之前加上感叹号 '!' 是什么意思?

// 这么写会报错,因为这是一个函数定义:
function(){}() //解析器是无法,报错error
// 常见的(多了一对括号),调用匿名函数:
(function() {console.log("匿名调用");})()
// 但在前面加上一个布尔运算符(只多了一个感叹号),就是表达式了,将执行后面的代码,也就合法实现调用
!function() {}()

我们都知道,函数的声明方式有这两种
function fnA(){alert('msg');}//声明式定义函数
var fnB = function(){alert('msg');}//函数赋值表达式定义函数
楼主问题中出现的两个函数,都是匿名函数。通常,我们调用一个方法的方式就是 FunctionName()

但是,如果我们尝试为一个"定义函数"末尾加上(),解析器是无法理解的。
function msg(){ alert('message');}(); //解析器是无法理解的
定义函数的调用方式应该是 msg() ; 那为什么将函数体部分用()包裹起来就可以了呢?

原来,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数。也就是说,任何能将函数变成一个函数表达式的作法,都可以使解析器正确的调用定义函数。而 ! 就是其中一个,而 + - || 都有这样的功能。

另外,用 ! 可能更多的是一个习惯问题,不同的运算符,性能是不同的。

`