关于JS中的方法是否加括号的问题

js中的方法什么时候加括号什么时候不加括号呢,我们有时候经常就搞不清楚,记住下面这几点就好理解了。

1.函数做参数时都不要加括号。

function fun(a){
    alert(a);
}

function getE(fun,e){
    fun(e);
}
getE(fun,3);//弹出3,这里把函数fun当成实参传入,所以就不用加括号了。

2.函数调用的时候是要加括号的,上面这个例子中getE这个函数调用的时候,不管有没有参数,都是要加括号的。

3.函数作为赋值符号右边的时候,无括号表示的是传递函数这个对象,有括号的时候表示传递的是函数的返回值。当作为retrun返回语句时也是同理。

function fun(){
    console.log("666");
}

//var getFun = fun();这样就直接打出666了。
var getFun = fun;
getFun();//这样子就是表示对这个函数的引用,要执行的话就还要加括号去调用。

上面这个例子比较简单,我们看下面这个稍微复杂一点的。

function f1() {    
    var n = 999;                  
    function f2() {           
        alert(n);           
    }           
    return f2; 
}       
var result = f1();//这里是要执行f2这个函数,所以f1加括号,传递的是他的返回值,这里是f2。  
result();//然后这里再加括号去掉用f2,所以结果弹出999。

那如果我们把f1的括号去掉,依旧要弹出n怎么办呢?我们可以这么做:

function f1() {    
    var n = 999;                  
    function f2() {           
        alert(n);           
    }           
    return f2();//所以要在这里加个括号,这样就会返回f2然后调用,就可以弹出n了。
}       
var result = f1;//这里我们把f1的括号去掉,那么就是对这个函数的引用
result();//然后这里就只是执行了f1这个函数。结果是返回f2,就不会弹出n

最后总结:我们只需要记住最后那一点就可以了:无括号表示的是传递函数这个对象,有括号的时候表示传递的是函数的返回值。

时间: 2024-12-29 01:27:44

关于JS中的方法是否加括号的问题的相关文章

js中Date 方法

Date (对象) Date 对象能够使你获得相对于国际标准时间(格林威治标准时间,现在被称为 UTC-Universal Coordinated Time)或者是 Flash 播放器正运行的操作系统的时间和日期.要使用Date对象的方法,你就必须先创建一个Date对象的实体(Instance). Date 对象必须使用 Flash 5 或以后版本的播放器. Date 对象的方法并不是静态的,但是在使用时却可以应用于所指定的单独实体. Date 对象的方法简介: ·getDate | 根据本地时

【转载】JS中bind方法与函数柯里化

原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情况戳这里ECMAScript 5 compatibility table),权威指南上提到在ES3中利用apply模拟该方法的实现(JS权威指南中函数那章), 但无法真实还原该方法, 这也是真bind方法中的有趣特性. (原文这边理解有问题, 这段话的意思如果结合犀牛书上下文的意思, 再结合犀牛书中

js中调用函数时加不加括号的问题

其实总结起来如下:函数只要是要调用它进行执行的,都必须加括号.此时,函数()实际上等于函数的返回值.当然,有些没有返回值,但已经执行了函数体内的行为,这个是根本,就是说,只要加括号的,就代表将会执行函数体代码.不加括号的,都是把函数名称作为函数的指针,用于传参,此时不是得到函数的结果,因为不会运行函数体代码.它只是传递了函数体所在的地址位置,在需要的时候好找到函数体去执行. 所以一般时候我们都是采用的是无括号的原因.这也是由于括号的二义性,因为括号是"函数调用运算符",相当于在执行这样

JS 中函数名后面加与不加括号的区别

1 a.onmouseover = fn1; 2 a.onmouseout = fn2; 3 function fn1(){ 4 div.className = "erweima show"; 5 } 6 function fn2(){ 7 div.className = "erweima hide"; 8 } 只要调用函数进行执行,都必须加括号. 函数是一个对象,函数名是指向这个对象的指针. 函数名后面加上括号就表示立即调用执行这个函数里面的代码. 使用不带圆括号

js中extends方法

一.jQuery extend方法介绍 jQuery的API手册中,extend方法挂载在jQuery和jQuery.fn两个不同对象上方法,但在jQuery内部代码实现的是相同的,只是功能却不太一样: 且看官方给出解释: jQuery.extend(): Merge the contents of two or more objects together into the first object.(把两个或者更多的对象合并到第一个当中): jQuery.fn.extend():Merge t

JS中onload方法,JQ中的load,ready方法

JS中的 onload 属性:网页中所有的内容加载完毕后(包括图片)才能执行: 页面中只能有一个onload window.onload = function() { …… }; JQ的 ready() 属性:网页中所有DOM结构绘制完毕后就执行,可能DOM元素关联的东西并没有加载完(例如图片): 页面中可以写用多个 $(document).ready(function() { …… }); 简写:$(function(){……}) JQ的 load() 属性:这个方法会等到页面所有内容加载完毕

js中call方法的使用介绍

js call call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 参数 thisObj 可选项.将被用作当前对象的对象. arg1, arg2, , argN 可选项.将被传递方法参数序列. 说明 call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对

js中eval() 方法的使用以及一些特殊的使用方式

1.eval方法只能在非严格模式中进行使用,在use strict中是不允许使用这个方法的. 2.eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句.如果s语句执行结果是一个值,则返回此值,否则返回undefined. 需要特别注意的是对象声明语法"{}"并不能返回一个值,需要用括号括起来才会返回值.如下: var code1='"a" + 2'; //表达式 var code2='{a:2}'; //语句 alert(eval(code1)

js中apply方法的使用

1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是: 1 Object.extend = function(destination, source) { 2 for (property in source) { 3 destination[property] = source[property]; 4 } 5 return destination; 6 } 除此之外,还有种方法,就是:Function.apply(当然使用Function.call