js函数的非常规调用方式

我们都知道,函数的声明方式有这两种

function fnA(){alert(‘msg‘);}//声明式定义函数
var fnB = function(){alert(‘msg‘);}//函数赋值表达式定义函数

通常,我们调用一个方法的方式就是 FunctionName()

但是,如果我们尝试为一个“定义函数”末尾加上(),解析器是无法理解的。

function msg(){
  alert(‘message‘);
}();//解析器是无法理解的

定义函数的调用方式应该是 msg() ; 那为什么将函数体部分用()包裹起来就可以了呢?

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

另外,用 ! 可能更多的是一个习惯问题(比双括号省略一个字符),不同的运算符,性能是不同的。

时间: 2024-11-05 14:54:39

js函数的非常规调用方式的相关文章

JS高级---函数中的this的指向,函数的不同调用方式

函数中的this的指向 普通函数中的this是谁?-----window 对象.方法中的this是谁?----当前的实例对象 定时器方法中的this是谁?----window 构造函数中的this是谁?-----实例对象 原型对象方法中的this是谁?---实例对象 //严格模式: "use strict";//严格模式 function f1() { console.log(this);//window } f1() 函数的不同调用方式 //普通函数 function f1() {

CocosCreator 中 JS 与 Java 互相调用方式和注意事项

JS 调用 Java 方法在 CocosCreator 下 JS 调用 Java/Objective-C 的格式都是: var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)JS 只能调用 Java 中的静态方法,需要传入类名.方法名.方法签名.方法参数,并且可以获得返回值. 类名类名必须是包含 Java 包路径的完整类名,而且用斜线 / 代替点 . ,例如 co

iframe子页面js调用父页面js函数/父页面调用Iframe子页面中js方法

1.假设当前页面为a.html, iframe的src页面为b.html,其代码如下: 1 <span class="tag"><html> 2 <br></span><span class="tag"><head> 3 <br></span><span class="tag"><title></span><s

node.js 函数定义和调用

·函数定义: var a=2; function add(i){ if(i>0){ return 1; }else{ return 2; } } add(a); console.log(add(a)); function  //函数定义 add   //函数名称 (i)   //形参,多个形参可以用 , 隔开 {}   //函数体   可以包含若干语句   也可以没有语句 add(a)    //实参,是将 a 的值付给形参 i    (函数调用) 注:函数内部的语句 ,执行到return时,函

js 函数定义三种方式

今天看到js原来有很多种定义的方式 var region = new Object();region.isAdmin = false;region.loadRegions = function(b, a, c) { Ajax.call(region.getFileName(), "type=" + a + "&target=" + c + "&parent=" + b, region.response, "GET&quo

js函数定义和调用

由于JavaScript的函数也是一个对象,上述定义的abs()函数实际上是一个函数对象,而函数名abs可以视为指向该函数的变量. var abs = function (x) { if (x >= 0) { return x; } else { return -x; } }; 这种方式下,function (x) { ... }是一个匿名函数,它没有函数名.但是,这个匿名函数赋值给了变量abs,所以,通过变量abs就可以调用该函数. abs()//返回NaN 此时abs(x)函数的参数x将收到

JS函数的三种方式

函数,一段能够自动完成某些功能的代码块,函数的出现,既解决了重复使用重一功能的需求,又可以避免代码的臃肿性. 使用函数有两个要求:必须调用后才可以执行;函数名不要和关键字以及系统函数相同; 函数主要有三种,直接调用,参数传递,返回值. 直接调用: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>圆

函数指针的调用方式

先上实例,再作分析 #include <stdio.h>void myfun(void);int main(void){ void (*pf)(void); pf = myfun; /* 也可以这样赋值:pf = &myfun; 其道理同下*/ (*pf)(); pf(); return 0;}void myfun(void){ printf("hello world!\n");} 第一种方法:因为pf指向myfun函数,*pf就是myfun函数,因此表达式(*pf

AS与JS相互通信(Flex中调用js函数)

Flex中As调用Js的方法是:      1.导入包 (import flash.external.ExternalInterface;)      2.使用ExternalInterface.call("Js函数名称",参数)进行调用,其返回的值就是Js函数所返回的值 Js调用As的方法是:      1.导入包 (import flash.external.ExternalInterface;)      2.在initApp中使用ExternalInterface.addCal