【废弃】【WIP】JavaScript 函数
创建: 2017/10/09
更新: 2017/11/03 加上【wip】
废弃: 2019/02/19 重构此篇。原文归入废弃
增加【废弃中】标签与总体任务
结束: 2019/03/12 完成废弃, 删除【废弃中】标签, 添加【废弃】标签
结束: 2019/03/03 完成废弃, 删除【废弃中】标签, 添加【废弃】标签
【TODO】
// TODO: 第9章 关于函数的构造函数呼出与call, apply
// TODO 8.7 补充即时函数用途
// TODO: 补充JavaScript编译过程, p179
// TODO: 8.8及以后
函数的定义 | |||||||||||||||||||||||||||||||
所有声明不分顺序,自动排序 | |||||||||||||||||||||||||||||||
普通声明 | function test(a) { return a; } 只有这种在定义后在程序任何位置都可以呼出 |
||||||||||||||||||||||||||||||
函数字符来定义 |
var sample = function(a) { 不会被预处理
|
||||||||||||||||||||||||||||||
Object来定义 |
var name = new function("x", "y", ... , "process") 最后一个是处理,前面都是参数 不会被预处理
|
||||||||||||||||||||||||||||||
箭头函数式来定义 |
var sample = x => x*x; 不会被预处理 |
||||||||||||||||||||||||||||||
嵌套函数 | 函数内部的函数
|
||||||||||||||||||||||||||||||
函数的呼出 | |||||||||||||||||||||||||||||||
函数的呼出方法 | function sample() {}
|
||||||||||||||||||||||||||||||
即时函数 (无名函数) |
定义与呼出同时进行
|
||||||||||||||||||||||||||||||
函数的参数 | |||||||||||||||||||||||||||||||
参数的省略 | 省略掉的为undefined undefined是没有赋值 null是赋予的是空值 |
||||||||||||||||||||||||||||||
不固定长度的参数 | 所有函数内部可用arguments
|
||||||||||||||||||||||||||||||
传值和传参 | object参数传送的是参照(指针) | ||||||||||||||||||||||||||||||
递归函数 | |||||||||||||||||||||||||||||||
三种写法 |
|
||||||||||||||||||||||||||||||
程序的编译与运行 | |||||||||||||||||||||||||||||||
生成全局对象 | |||||||||||||||||||||||||||||||
解析程序 | |||||||||||||||||||||||||||||||
运行程序 | |||||||||||||||||||||||||||||||
单线程 | |||||||||||||||||||||||||||||||
call对象及本地变量 | |||||||||||||||||||||||||||||||
this的值 |
被呼出函数所属对象 函数内部函数的this是全局变量 |
||||||||||||||||||||||||||||||
命名空间 |
var a = "a"; function f() { var b = "b"; function g() { var c = "c"; console.log(a+b+c); } } f();
|
||||||||||||||||||||||||||||||
垃圾回收 |
释放从全局对象无法到达的量 不用在意 |
||||||||||||||||||||||||||||||
闭包 | |||||||||||||||||||||||||||||||
JavaScript的所有函数都是闭包 闭包内部可以有函数(闭包) |
|||||||||||||||||||||||||||||||
应用 | |||||||||||||||||||||||||||||||
命名空间 | |||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||
用对象管理程序本地代码 |
var myApp = myApp || {}; myApp.login = ...; myApp.configs = {}; //部分空间内部再划分部分空间
所有东西追加成属性 |
||||||||||||||||||||||||||||||
用函数作为命名空间 |
(function () { // 程序所有内容写在这里 })();
module模式 // 作为即时函数,把module相关传递给指定参数 var Module = Module || {}; (function (_module) { var name = "none"; // 私有变量 function getName () { // 私有方法 return name; } _module.showName() = function () { // 公共方法 console.log(getName()); } })(Module);
|
||||||||||||||||||||||||||||||
作为对象(Object)的函数 | |||||||||||||||||||||||||||||||
函数也是对象 |
● 可以代入变量,对象属性, 数组元素 ● 可以作为函数的参数, 返回值 ● 可以有属性和方法 ● 可以作为不带名字的字符, 即无名函数 function () {} ● 可以动态生成 |
||||||||||||||||||||||||||||||
函数的属性(property) |
|
||||||||||||||||||||||||||||||
添加自定义属性 |
function test() {...} test.newProperty = "sample"; // 和其他对象添加属性一样写法
|
||||||||||||||||||||||||||||||
高阶函数 | |||||||||||||||||||||||||||||||
定义 | 以函数为参数或返回值的函数 | ||||||||||||||||||||||||||||||
回调函数 | |||||||||||||||||||||||||||||||
ES6关于函数的扩张 | |||||||||||||||||||||||||||||||