关于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
最后总结:我们只需要记住最后那一点就可以了:无括号表示的是传递函数这个对象,有括号的时候表示传递的是函数的返回值。
关于JS中的方法是否加括号的问题的更多相关文章
- js中settimeout方法加参数
js中settimeout方法加参数的使用. 简单使用看w3school 里面没有参数调用, 例子: <script type="text/javascript"> ...
- js中split()方法得到的数组长度
js 中split(",")方法通过 ”,“ 分割字符串, 如果字符串中没有 “,” , 返回的是字符串本身 var str = “abc”://分隔符个数为0 var newSt ...
- JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)
1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...
- 【转载】JS中bind方法与函数柯里化
原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...
- 原生JS中apply()方法的一个值得注意的用法
今天在学习vue.js的render时,遇到需要重复构造多个同类型对象的问题,在这里发现原生JS中apply()方法的一个特殊的用法: var ary = Array.apply(null, { &q ...
- js中apply方法的使用
js中apply方法的使用 1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是: Object.extend = function(destinat ...
- paip.编程语言方法重载实现的原理及python,php,js中实现方法重载
paip.编程语言方法重载实现的原理及python,php,js中实现方法重载 有些语言,在方法的重载上,形式上不支持函数重载,但可以通过模拟实现.. 主要原理:根据参数个数进行重载,或者使用默认值 ...
- js匿名函数(变量加括号就是函数)
js匿名函数(变量加括号就是函数) 一.总结 变量加括号就是函数,而函数的括号是用来传参的 1.类比:以正常函数去想匿名函数,匿名函数比正常函数只是少了函数名,本质还是一样,该怎么传参还是怎么传参,小 ...
- js中的方法如何传入多个参数
js中的方法如何传入多个参数 $(function () { let parameter1 = 1; let parameter2 = 'Hello World'; let parameter3 = ...
随机推荐
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
ADO.NET 一.ADO.NET概要 ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库 二.ADO.NET的组成 ①System.Data → DataTable, ...
- LeetCode 350. Intersection of Two Arrays II (两个数组的相交之二)
Given two arrays, write a function to compute their intersection. Example:Given nums1 = [1, 2, 2, 1] ...
- Ubuntu12.04.3LTS安装Oracle Java 7
今天在ubuntu 12.04 LTS 上安装Matlab时总是出错,显示拷贝jar包(cp "xx.jar")出现错误,在网上搜索了一下发现原来是没有安装java.自己打算安装o ...
- Android中相机拍照
Android中调用系统相机的api接口在android.hardware包中.包里面类主要用到了Camera类.该类里面包含几个内部类:Camera.Parameters.Camera.Camera ...
- linux常用命令---持续添加中...
1.cp -r 源文件夹 目的文件夹 // -r 可递归所有子目录及文件 2.grep -r 查找内容 ./* //递归查找当前目录下所有文件指定内容 3. 查看系统运行时间 who - ...
- IEC61131-3——数据类型
1. 摘要 列出IEC61131-3支持的几种常用数据类型. 2. 内容 使用USB-CAN接口卡调试从站,SDO发送使用的功能码与字节的关系如下. 2f表示8位,2b表示16位,23表示32位数据. ...
- 怎么看待MYSQL的性能
MySQL在单实例性能方面和Oracle相比还有一些差距,我们通过规范和技术手段来降低这些性能差距带来的问题. 首先,大量甚至海量数据的增删改.查询.聚合查询的性能还有待提高.为了规避这些问题,我们在 ...
- 70.资金管理-福利表管理 Extjs 页面
1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8&quo ...
- [Swift通天遁地]七、数据与安全-(8)创建普通PDF文档和加密PDF文档
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- web自动化测试—selenium操作游览器属性
# coding=utf-8'''web游览器属性: 页面最大化 maximize_window() 获取当前页面地址 current_url 代码 page_source title title 后 ...