函数——箭头函数&自执行函数(二)
一、箭头函数是在es6中添加的一种规范,它相当于匿名函数,简化了函数的定义。
1、语法
a、function用var,let,cost来表示;
b、参数要写在第一个等号后面;
参数有多个,需要加一个小括号,参数用逗号隔开);只有一个参数时,可以不需要括号;没有参数,写一对空的小括号。
c、函数的主体内容是放在箭头后面
如果主体有多条语句,需要把它们放在一对大括号里;如果主体只有一条语句,那就直接写(如果这条语句里有return,依然需要加上大括号);如果主体只有一条语句,并且是个对象,需要把它用括号括起来。
<script>
//多个参数
const fn = (a, b) => {
let result = a + b;
console.log(result);//3
}
fn(1, 2) //只有一个参数
var fn2 = c => {
console.log(c); //davina
}
fn2('davina'); //没有参数
let fn3 = () => {
console.log('123');
}
fn3(); //123 //函数里只有一句话
const fn4 = d => console.log(d); //lisa
fn4('lisa'); //函数里只有return一句话时
const fn5=()=>{return{a:10,b:20}};
console.log(fn5()); //{a: 10, b: 20}
</script>
2、需要注意的是:
箭头函数只能先定义再使用,箭头函数里没有this对象,函数在哪里定义的,this就指向谁(箭头函数会继承外层函数调用的this绑定);
没有this也就不能调用函数的call,apply,bind方法了;没有this就不是构造函数,不能用new去调用;箭头函数里没有arguments对象。
<script>
const dog = {
color: 'white',
show1: function () {
console.log(this.color);
},
show2: () => {
console.log(this.color);
},
show3: function () {
const show4 = () => {
console.log(this.color);
}
show4();
}
}
dog.show1();//white
dog.show2();//undefined
dog.show3(); //white //不用用call和没有arguments对象
const bigDog =
{
color: 'black'
}
dog.show2.call(bigDog); //undefined const fn6 = () => {
console.log(arguments) // ReferenceError: arguments is not defined
}
fn6(1, 3);
</script>
二、自执行函数:函数被定义后它可以自动执行。
函数表达式可以直接加上小括号调用但函数声明不能直接调用,因为小括号里只能放表达式,不能放语句,function关键字既可以当作语句,也可以当作表达式,但是js规定function关键字出现在行首,一律解释成语句。
<script>
var fn1 = function () {
console.log('这是一个函数表达式'); //这是一个函数表达式
}(); // function fn2(){
// console.log('这是一个函数声明'); //函数声明加上小挌号报错
// }();</script>
解决方法:不让function出现在行首
a. 用括号把function主体括起来,转成表达式,后面加括号
b.借助运算符(new + - ! typeof && || ...)
<script>
//1、加括号
(function fn2() {
console.log('这是一个函数声明'); //这是一个函数声明
})(); (function fn2() { console.log('这是一个函数声明') }());//这是一个函数声明 //两种模式
(function () { })();
(function () { }()); //2、函数变成表达式
0 + function (a) {
console.log(a) //与数字相加变成表达式
}('与数字相加变成表达式') true && function (a) {
console.log(a) //1.利用逻辑运算符变成表达式
}('1.利用逻辑运算符变成表达式') false || function (b) {
console.log(b)
}('2.利用逻辑运算符变成表达式') //2.利用逻辑运算符变成表达式 ~function (c) {
console.log(c)
}('利用+ - !~ 变成表达式') //利用+ - !~ 变成表达式 typeof function (d) {
console.log(d)
}('利用typeof') //利用typeof
</script>
        {
            let x = 10;
            ((x) => {
                console.log(x); //10
            })(x);
        }
函数——箭头函数&自执行函数(二)的更多相关文章
- js中的匿名函数和匿名自执行函数
		1.匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景: <input type="button" value="点击" id ... 
- JavaScript闭包函数&箭头函数调用与执行
		一.标准的闭包函数 //一.标准的闭包函数 function A() { var i=0; ++i; console.log('i : ' + i); return function b() { re ... 
- js中函数表达式和自执行函数表达式的用法总结
		立即调用函数表达式 给函数体加大括号,在有变量声明的情形下,没有任何区别 但是,如果只是[自动执行]的情形下,就会不同 因为,一个匿名函数,不赋值或函数体不加小括号,是不能自动执行的 //以下情形并无 ... 
- jquery中ready函数,$(function(){})与自执行函数的区别
		<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ... 
- lua 根据函数名字符串来执行函数
		function myfunction(msg) print("this is msg fun " .. msg); end local fun =_G["myfunct ... 
- 使用"立即执行函数"(Immediately-Invoked Function Expression,IIFE)
		一.原始写法 模块就是实现特定功能的一组方法. 只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块. function m1(){ //... } function m2(){ // ... 
- 立即执行函数(IIFE)的理解与运用
		作为JavaScript的常用语法,立即执行函数IIFE(Immediately-Invoked Function Expression)是值得我们认真去学习探究的. 一.创建函数的两种方式 我们先从 ... 
- JS执行顺序-函数声明提升、匿名函数、函数表达式
		大方向上: JS 是按照 代码块 进行 编译.执行 的. 学习至: 1.变量声明提升 2.新唐的博客 3.js中匿名函数的创建与调用方法分析 4.前端圣经 - <高程三> 5.深入理解变量 ... 
- 【JavaScript专题】--- 立即执行函数表达式
		一 什么是立即执行函数表达式 立即执行函数表达式,其实也可以叫初始化函数表达式,英文名:IIFE,immediately-inovked-function expression.立即执行函数表达式就是 ... 
- (译)详解javascript立即执行函数表达式(IIFE)
		写在前面 这是一篇译文,原文:Immediately-Invoked Function Expression (IIFE) 原文是一篇很经典的讲解IIFE的文章,很适合收藏.本文虽然是译文,但是直译的 ... 
随机推荐
- hashMap 底层原理+LinkedHashMap 底层原理+常见面试题
			1.源码 java1.7 hashMap 底层实现是数组+链表 java1.8 对上面进行优化 数组+链表+红黑树 2.hashmap 是怎么保存数据的. 在hashmap 中有这样一个结构 ... 
- Linq Introduce
			Linq学习网址: http://www.java2s.com/Code/CSharp/LINQ/CatalogLINQ.htm 
- Apache 2.4下配置Apache和PHP,使之协同工作
			1.修改httpd的主配置文件httpd.conf,搜索ServerName#ServerName www.example.com:80 修改为:ServerName www.example.com: ... 
- hadoop 2.8.5安装步骤
			1.创建hadoop用户,作为haoop的运行用户 2.配置JAVA_HOME环境变量,修改/etc/profile export JAVA_HOME=/usr/java/jdk1.8.0_51 ex ... 
- 【ARTS】01_24_左耳听风-201900422~2019004028
			ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ... 
- IOS上的 Audio Memos SE 如何分享和传输录音到电脑?
			Audio Memos SE 是 Audio Memos 的精简版 ,顾名思义就是少了很多实用功能.当初下载这个就是因为广告比较少一些,没有全屏幕的广告. 好了,录了音,想分享和传到电脑要怎么弄呢? ... 
- DRF-路由
			路由Routers 对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST framework提供 ... 
- JAVA数据结构和算法 6 递归
			递归:直接或者间接地调用自己.比如计算连续数的阶乘,计算规律:n!=(n-1)!*n. 每个递归方法都有一个基值(终止)条件,以防止无线地递归下去,以及由此引发的程序崩溃. 采用递归是因为它可以从概念 ... 
- 【ES 系列1】介绍与方案设计
			简介 ElasticSearch是一个高度可扩展的开源全文搜索和分析引擎.它允许您快速.近实时地存储.搜索和分析大量数据.它通常被用作驱动具有复杂搜索功能和需求的应用程序的底层引擎/技术.适用于需要大 ... 
- KMP --关于cogs1570 乌力波
			题目链接:http://cogs.pro:8081/cogs/problem/problem.php?pid=vQzXJkgWa [题目描述] 法国作家乔治·佩雷克(Georges Perec,193 ... 
