前端小课堂 js:函数的创建方式及区别

js 函数的创建大体有这几种方式:
-1-函数表达式(函数字面量):
说白了就是把一个函数赋值给了一个变量。
var fun1 = function(index){
alert(index);
}
fun1(1);
函数表达式其中还包括匿名自执行函数,这种方式函数不用调用就会自己执行:
比如:
(function(i){
alert(i);
})(index)
也许你会问我什么时候会用匿名自执行函数呢?给你看个面试题:
for(var i = 0;i < 5;i ++){
setTimeout(function(){
alert(i);
},i*1000)
}
这个函数会输出什么呢?
其实大家应该都知道因为用 var声明的i会每次循环都会被重新赋值所以应该是 5 ,这个用 es6 的 let 声明可以解决这个问题,但是我们想探讨的是setTimeout 没有按照我们想要的事件 alert 这里有很多解决方案,匿名自执行函数就是其一:
for(var i = 0;i < 5;i ++){
(function(time){
setTimeout(function(){
console.log(time);
},time*4000)
})(i)
}
这样就可以解决我们的问题。深究其原理的话,它主要创建一个新的函数作用域,在这个新的函数作用域里面将外面的参数变成了一个局部变量进行的一系列操作吧,个人见解。
-2-函数声明:
会经常用到的一种声明函数的方式。
function fun1(index){
alert(index);
}
fun1(2);
区别
函数表达式和函数声明的区别在于函数声明在调用前后都没问题,因为js解析代码的时候会将 函数声明的函数前置,函数表达式的话要注意必须提前声明,因为函数表达式最终是通过var将函数赋值给了一个变量,初始值肯定为underfind,在函数表达式前调用的话肯定返回underfind,因为js还没有赋值呢。
** -3- new 函数 (不推荐)**
var fun1 = new Function("参数")
这里的new Function()和 new Array()、new Object()等相似。
© 著作权归作者所有
文/wbg(简书作者)
原文链接:http://www.jianshu.com/p/a32425f422c5
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
前端小课堂 js:函数的创建方式及区别的更多相关文章
- 前端小课堂 js:what is the function?
js 函数: 概念:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. 说白了就是响应用户操作所执行的代码,通过js事件触发,然后调用执行函数里代码的操作. 比如常见的用户点击事件,用户点击 ...
- js函数的创建
1.js 函数的创建有几种方式: 1.1 直接声明 1.2 创建匿名函数,然后赋值 1.3 声明函数,然后赋值给变量 1.4 使用1.3 得到的变量再赋值给变量 1.5 使用函数对象创建函数 < ...
- js两种定义函数、继承方式及区别
一:js两种定义函数的方式及区别 1:函数声明: function sayA() { alert("i am A"); } 2:函数表达式: var sayB = function ...
- js 函数定义的方式
js 函数定义的方式 一.总结 一句话总结: 最常见就下面三种 最常见:function func1([参数]){/*函数体*/} 将匿名函数赋值给变量:var func2=function([参数] ...
- 第163天:js面向对象-对象创建方式总结
面向对象-对象创建方式总结 1. 创建对象的方式,json方式 推荐使用的场合: 作为函数的参数,临时只用一次的场景.比如设置函数原型对象. var obj = {}; //对象有自己的 属性 和 行 ...
- js 对象的创建方式和对象的区别
js一个有三种方法创建对象,这里做一个总结. 1.对象直接量 所谓对象直接量,可以看做是一副映射表,这个方法也是最直接的一个方法,个人比较建议, 1 2 3 4 5 6 7 8 9 10 11 12 ...
- Java中String两种不同创建方式的区别及intern的用法
一, Java有两种创建字符串的方式, String str1 = "abc"; String str2 = new String("abc"); 用双引号创建 ...
- 前端小知识-js
一.对象冒充 function student(name,age){ this.name = name; this.age = age; this.show = function(){ console ...
- 自定义博客cnblogs样式的必备前端小知识——js、jq
JQ.JS相关小知识 任意元素自动点击 $(".editicon").trigger('click') 添加子元素 append() - 在被选元素的结尾插入内容 prepend( ...
随机推荐
- Nginx基础学习(一)—Nginx的安装
一.Nginx介绍 1.什么是Nginx? Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开 ...
- JDBC基础学习(五)—批处理插入数据
一.批处理介绍 当需要成批插入或者更新记录时.可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率. JDBC的批量处理语句包括下 ...
- Android IPC机制全解析<二>
在AIDL文件中并不是所有的数据类型都可以使用,AIDL支持的数据类型如下: 基本数据类型(int.long.char.boolean.double等) String和CharSequence Lis ...
- mysql加密解密方式用法
如果你使用的正是mysql数据库,那么你把密码或者其他敏感重要信息保存在应用程序里的机会就很大.保护这些数据免受黑客或者窥探者的获取是一个令人关注的重要问题,因为你既不能让未经授权的人员使用或者破坏应 ...
- Java设计模式:工厂模式
问题提出 Java的工厂模式与现实生活中的工厂的模型是很相似的.工厂是用来做什么?当然是用来生成产品.因此在Java的工厂模式的关键点就是如何描述好产品和工厂这2个角色之间的关系. 下面来仔细描述一下 ...
- MetaProducts Offline Explorer使用简易教程
MetaProducts Offline Explorer使用简易教程 by windtrace 20170419 最近想下载一个网站上的内容打包成chm文件,以便离线浏览,webzip太长时间不更 ...
- Latex 公式在线可视化编辑器
寻觅 最近的一个demo需要用到Latex公式在线编辑器,从搜索引擎一般会得到类似http://latex.codecogs.com/eqneditor/editor.php的结果,这个编辑器的问题在 ...
- TCP三次握手四次挥手过程及各过程中客户端和服务器端的状态。
#三次握手 客户端向服务器端发送SYN包,客户端进入SYN_SEND状态 服务器端收到客户端发送的包返回ACK+SYN包,服务器端进入SYN_RECV状态 客户端收到服务器端返回的包再发回ACK包,客 ...
- CSS浮动专题!
在css中,浮动问题可能是很多刚入门的小白比较头疼的问题. 1,首先先来介绍一下两种浮动类型:左浮动和右浮动 1) float:left;左浮动,后面的内容会流向对象的右侧 2) float:righ ...
- 解决Javascript大数据列表引起的网页加载慢/卡死问题。
在一些网页应用中,有时会碰到一个超级巨大的列表,成千上万行,这时大部份浏览器解析起来就非常痛苦了(有可能直接卡死). 也许你们会说可以分页或动态加载啊?但是有可能需求不允许分页,动态加载?网络的延迟也 ...