From b44a3aefb5ae47ff0b3c1ccdd4ab25833e1eaed7 Mon Sep 17 00:00:00 2001 From: qianguyihao Date: Fri, 11 Jan 2019 21:53:44 +0800 Subject: [PATCH] =?UTF-8?q?update:=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../08-基本数据类型vs引用数据类型.md | 10 + 03-JavaScript基础/09-函数.md | 238 ++++-------------- 03-JavaScript基础/17-对象、作用域和this.md | 43 ++++ 3 files changed, 102 insertions(+), 189 deletions(-) diff --git a/03-JavaScript基础/08-基本数据类型vs引用数据类型.md b/03-JavaScript基础/08-基本数据类型vs引用数据类型.md index 23afd69..4dbb50a 100644 --- a/03-JavaScript基础/08-基本数据类型vs引用数据类型.md +++ b/03-JavaScript基础/08-基本数据类型vs引用数据类型.md @@ -70,3 +70,13 @@ +## 我的公众号 + +想学习**代码之外的技能**?不妨关注我的微信公众号:**千古壹号**(id:`qianguyihao`)。 + +扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外: + +![](http://img.smyhvae.com/2016040102.jpg) + + + diff --git a/03-JavaScript基础/09-函数.md b/03-JavaScript基础/09-函数.md index 4d0ed5d..3a49f63 100644 --- a/03-JavaScript基础/09-函数.md +++ b/03-JavaScript基础/09-函数.md @@ -1,6 +1,6 @@ -## 函数 +## 函数的介绍 函数:就是将一些功能或语句进行**封装**,在需要的时候,通过**调用**的形式,执行这些语句。 @@ -18,9 +18,9 @@ ```javascript console.log("你好"); - sayHello(); //调用函数 + sayHello(); // 调用函数 - //定义函数: + // 定义函数 function sayHello(){ console.log("欢迎"); console.log("welcome"); @@ -28,6 +28,9 @@ ``` + +## 函数的定义和调用 + ### 第一步:函数的定义 **方式一**:使用`函数声明`来创建一个函数。语法: @@ -53,11 +56,11 @@ - 函数名字:命名规定和变量的命名规定一样。只能是字母、数字、下划线、美元符号,不能以数字开头。 -- 参数:后面有一对小括号,里面是放参数用的。 +- 参数:可选。 - 大括号里面,是这个函数的语句。 -PS:方法写完之后,我们在方法的前面输入`/**`,然后回车,会发现,注释的格式会自动补齐。 +PS:在有些编辑器中,方法写完之后,我们在方法的前面输入`/**`,然后回车,会发现,注释的格式会自动补齐。 **方式二**:使用`函数表达式`来创建一个函数。语法: @@ -88,7 +91,7 @@ PS:方法写完之后,我们在方法的前面输入`/**`,然后回车, 函数名字(); ``` -### 函数的参数:形参和实参 +## 函数的参数:形参和实参 函数的参数包括形参和实参。来看下面的图就懂了: @@ -100,14 +103,14 @@ PS:方法写完之后,我们在方法的前面输入`/**`,然后回车, 举例: ```javascript - sum(3,4); - sum("3",4); - sum("Hello","World"); + sum(3,4); + sum("3",4); + sum("Hello","World"); - //函数:求和 - function sum(a, b) { - console.log(a + b); - } + //函数:求和 + function sum(a, b) { + console.log(a + b); + } ``` 控制台输出结果: @@ -118,29 +121,9 @@ PS:方法写完之后,我们在方法的前面输入`/**`,然后回车, helloworld ``` -### 函数的返回值 - -举例: - -```javascript - console.log(sum(3, 4)); - - //函数:求和 - function sum(a, b) { - return a + b; - } -``` - -return的作用是结束方法。 - ## 函数的参数:形参和实参 -函数的参数包括形参和实参。来看下面的图就懂了: - - -![](http://img.smyhvae.com/20180118_1130.png) - 假设我们定义一个求和的函数。 **形参:** @@ -152,21 +135,22 @@ return的作用是结束方法。 **实参**: -- 在调用函数时,可以在()中指定实参。 +- 在调用函数时,可以在 `()`中指定实参。 - 实参将会赋值给函数中对应的形参。 举例: ```javascript - sum(3,4); - sum("3",4); - sum("Hello","World"); + // 调用函数 + sum(3,4); + sum("3",4); + sum("Hello","World"); - //函数:求和 - function sum(a, b) { - console.log(a + b); - } + // 定义函数:求和 + function sum(a, b) { + console.log(a + b); + } ``` 控制台输出结果: @@ -185,7 +169,6 @@ return的作用是结束方法。 调用函数时解析器不会检查实参的类型,所以要注意,是否有可能会接收到非法的参数,如果有可能则需要对参数进行类型的检查。 - **实参的数量:** 调用函数时,解析器也不会检查实参的数量: @@ -196,23 +179,24 @@ return的作用是结束方法。 ![](http://img.smyhvae.com/20180314_2030.png) -### 函数的返回值 +## 函数的返回值 举例: ```javascript - console.log(sum(3, 4)); - //函数:求和 - function sum(a, b) { - return a + b; - } + console.log(sum(3, 4)); + + //函数:求和 + function sum(a, b) { + return a + b; + } ``` return的作用是结束方法。 注意: -- return后的值将会会作为函数的执行结果返回,可以定义一个变量,来接收该结果。 +- return后的值将会作为函数的执行结果返回,可以定义一个变量,来接收该结果。 - 在函数中return后的语句都不会执行(函数在执行完 return 语句之后停止并立即退出) @@ -223,17 +207,17 @@ return的作用是结束方法。 - 返回值可以是任意的数据类型,可以是对象,也可以是函数。 -### 函数名、函数体和函数加载问题(重要,请记住) +## 函数名、函数体和函数加载问题(重要,请记住) 我们要记住:**函数名 == 整个函数**。举例: ```javascript - console.log(fn) == console.log(function fn(){alert(1)}); + console.log(fn) == console.log(function fn(){alert(1)}); - //定义fn方法 - function fn(){ - alert(1) - }; + //定义fn方法 + function fn(){ + alert(1) + }; ``` 我们知道,当我们在调用一个函数时,通常使用`函数()`这种格式;但此时,我们是直接使用`函数`这种格式,它的作用相当于整个函数。 @@ -241,72 +225,6 @@ return的作用是结束方法。 **函数的加载问题**:JS加载的时候,只加载函数名,不加载函数体。所以如果想使用内部的成员变量,需要调用函数。 -### 回调函数 - -我们知道,当函数自己调用自己时,称之为递归。本段来讲一下回调。 - -回调:**函数作为参数**,进行传递和使用,称之为**回调**。 - -举个最简单的例子: - -```javascript - fn(test); //回调test这个函数 - - function fn(a){ - a(); - } - - function test() { - console.log("我是被回调的函数") - } - -``` - -输出结果:我是被回调的函数。 - - -**什么情况下使用回调函数:** - -回调函数一般是用于**定义一个规则**。因为我们无法通过传递一个变量来传递规则。 - -换而言之:当我们需要**传递规则的时候,必须使用回调**。规则的传递只能通过函数来实现,无法通过变量实现。 - - -举例: - -```javascript - console.log(fn(12,3,test1)); //注意第三个参数是函数名 - console.log(fn(12,3,test2)); //注意第三个参数是函数名 - - //定义一个通用规则(包含加减乘数的抽象函数) - fn(num1,num2,demo) { - return demo(num1,num2); - } - - //定义四个规则:加减乘除 - function test1(a,b) { - return a+b; - } - function test2(a,b) { - return a-b; - } - function test3(a,b) { - return a*b; - } - function test4(a,b) { - return a/b; - } -``` - - -打印结果: - -``` - 15 - 9 -``` - - ## fn() 和 fn 的区别【重要】 - `fn()`:调用函数。相当于获取了函数的返回值。 @@ -316,7 +234,7 @@ return的作用是结束方法。 ## 立即执行函数 -匿名函数如下: +现有匿名函数如下: ```javascript function(a, b) { @@ -329,82 +247,24 @@ return的作用是结束方法。 立即执行函数如下: ```javascript - (function(a, b) { - console.log("a = " + a); - console.log("b = " + b); - })(123, 456); + (function(a, b) { + console.log("a = " + a); + console.log("b = " + b); + })(123, 456); ``` 立即执行函数:函数定义完,立即被调用,这种函数叫做立即执行函数。 -立即执行函数往往只会执行一次。 - - -## arguments - -在调用函数时,浏览器每次都会传递进两个隐含的参数: - -- 1.函数的上下文对象 this - -- 2.**封装实参的对象** arguments - -例如: - -```javascript - function foo() { - console.log(arguments); - console.log(typeof arguments); - } - - foo(); -``` - - -![](http://img.smyhvae.com/20180315_0903.png) - -arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度。 - -在调用函数时,我们所传递的实参都会在arguments中保存。 - -arguments.length可以用来获取**实参的长度**。 - -我们即使不定义形参,也可以通过arguments来使用实参(只不过比较麻烦):arguments[0] 表示第一个实参、arguments[1] 表示第二个实参... - - -arguments里边有一个属性叫做callee,这个属性对应一个函数对象,就是当前正在指向的函数的对象。 - -```javascript - function fun() { - - console.log(arguments.callee == fun); //打印结果为true - } - - fun("hello"); -``` - - - - - - - - - - - - - - - - - - - +立即执行函数往往只会执行一次。为什么呢?因为没有变量保存它,执行完了之后,就找不到它了。 +## 我的公众号 +想学习**代码之外的技能**?不妨关注我的微信公众号:**千古壹号**(id:`qianguyihao`)。 +扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外: +![](http://img.smyhvae.com/2016040102.jpg) diff --git a/03-JavaScript基础/17-对象、作用域和this.md b/03-JavaScript基础/17-对象、作用域和this.md index d31c390..20092a0 100644 --- a/03-JavaScript基础/17-对象、作用域和this.md +++ b/03-JavaScript基础/17-对象、作用域和this.md @@ -275,3 +275,46 @@ ES6中的箭头函数并不会使用上面四条标准的绑定规则,而是会继承外层函数调用的this绑定(无论this绑定到什么)。 +## arguments(待定) + +在调用函数时,浏览器每次都会传递进两个隐含的参数: + +- 1.函数的上下文对象 this + +- 2.**封装实参的对象** arguments + +例如: + +```javascript + function foo() { + console.log(arguments); + console.log(typeof arguments); + } + + foo(); +``` + + +![](http://img.smyhvae.com/20180315_0903.png) + +arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度。 + +在调用函数时,我们所传递的实参都会在arguments中保存。 + +arguments.length可以用来获取**实参的长度**。 + +我们即使不定义形参,也可以通过arguments来使用实参(只不过比较麻烦):arguments[0] 表示第一个实参、arguments[1] 表示第二个实参... + + +arguments里边有一个属性叫做callee,这个属性对应一个函数对象,就是当前正在指向的函数的对象。 + +```javascript + function fun() { + + console.log(arguments.callee == fun); //打印结果为true + } + + fun("hello"); +``` + +