前端小课堂 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( ...
随机推荐
- asp.net core源码飘香:Configuration组件
简介: 这是一个基础组件,是一个统一的配置模型,配置可以来源于配置文件(json文件,xml文件,ini文件),内存对象,命令行参数,系统的环境变量又或者是你自己扩展的配置源,该组件将各个配置源的数据 ...
- Windows入门基础:1.关于CreateWindow()函数使用中遇到的问题
我在实现显示窗口的程序中,遇到一个问题:首先程序没有任何语法错误,编译能够通过,但是就是不能弹出窗口. 后来在MSDN中查询CreateWindow()函数,发现了下面这句话: "If lp ...
- C#设计模式:责任链模式
设计模式是面向对象编程的基础,是用于指导程序设计.在实际项目开发过程中,并不是一味将设计模式进行套用,也不是功能设计时大量引入设计模式.应该根据具体需求和要求应用适合的设计模式.设计模式是一个老话题了 ...
- 《c#入门经典第五版》简介及pdf电子书网盘下载地址(收藏)
<C#入门经典(第5版)>全面讲解C# 2010和.net架构编程知识,为您编写卓越C# 2010程序奠定坚实基础.C#入门经典系列是屡获殊荣的C#名著和超级畅销书.最新版的<C#入 ...
- ESLint系列:ESLint入门安装及简单配置
1.eslint需要依赖node.js环境,在配置之前需要安装好node.js; 2.npm install eslint --save-dev 或 npm install eslint --save ...
- 使用live555 在linux下搭建 rtsp server
系统环境 Debian 7 x64 / centos 7 x64 都可以 首先去下载源码 http://www.live555.com/liveMedia/public/live555-lates ...
- Linux - 死锁现象
一.死锁的概念: 1.死锁的现象描述: 在很多应用中,需要一个进程排他性的访问若干种资源而不是一种.例如,两个进程准备分别将扫描的文档记录到CD上.进程A请求使用扫描仪, 并被授权使用.但进程B首先请 ...
- nginx源码分析——event模块
源码:nginx 1.12.0 一.简介 nginx是一款非常受欢迎的软件,具备高性能.模块化可定制的良好特性.之前写了一篇nginx的http模块分析的文章,主要对http处理模块进行 ...
- CodeVS1344 线型网络
题目描述 Description 有 N ( <=20 ) 台 PC 放在机房内,现在要求由你选定一台 PC,用共 N-1 条网线从这台机器开始一台接一台地依次连接他们,最后接到哪个以及连接的顺 ...
- [KISSY5系列]KISSY5安装使用(二)
上篇文章,我们遗留的一个问题就是,请求数量有点多,虽然现在的浏览器的请求资源都是并发的.但是我们还是尽量减少请求量. 但是KISSY里面这个问题我们怎么解决呢,其实还是从data-config=&qu ...