【废弃】【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) {
    return a;
 }
 呼出: sample(123);

不会被预处理

 

 Object来定义

 var name = new function("x", "y", ... , "process")

 最后一个是处理,前面都是参数

 不会被预处理

 

 箭头函数式来定义

 var sample = x => x*x;

 不会被预处理

   
 嵌套函数  函数内部的函数
 位置  函数内部
 只可以在函数内部的"最外侧"(不能在if,for里面)
   同样声明上卷,作为函数内部的属性
   只能从定义的函数内部呼出
   
   
   
   
   
   
   
   
   
 函数的呼出
 函数的呼出方法  function sample() {}
 最普通的  sample();
 属性函数  object.func_name();
 呼出构造函数  new Object(); // TODO: 第9章
 call, apply  // TODO: 第9章
   
   
   
   
   
   

 即时函数

 (无名函数)

 定义与呼出同时进行
 
 普通  var f = function() {...};
 f();
 其他写法  (function() {...}) ();
   (function() {...} ());
   +function() {...} ();
 个人喜欢的写法

 可以带名字,只有函数内部可以用该名称

 

  +function a(args) { a(); } (args);
 用途  构造不污染全局空间的命名空间
// TODO 8.7 补充即时函数用途
   
   
   
   
   
   
   
 函数的参数
  参数的省略  省略掉的为undefined
 undefined是没有赋值
 null是赋予的是空值
 不固定长度的参数  所有函数内部可用arguments
   Arguments Object
 自带属性  
 length  参数数量
 callee  现在执行的函数
   
   
   
 获取参数的方法  arguments[0]
 arguments[1]
 ...
 转换成数组  var params = [].slicce.call(arguments);
 定义无限长的参数的函数

 用arguments获取参数 

function sample(a) {
    var result = a;
    for(var i = 1; i < arguments.length; i++) {
        s += arguments[i];
    }
    return result;
}

 

 

   
   
   
   
   
 传值和传参  object参数传送的是参照(指针)
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 递归函数
 三种写法  
 普通   function sample(...) {
    if (...) {
sample(...);
    }
 }
 带一个本地可用名的无名函数  var sample = function f(...) {
    if (...) {
       f(...);
    }
 }
 不带本地名的无名函数  var sample = function(...) {
    if (...) {
       arguments.callee(...);
    }
 }
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 程序的编译与运行
 生成全局对象  
 解析程序  
 运行程序  
 单线程  
 call对象及本地变量  
 this的值

 被呼出函数所属对象

 函数内部函数的this是全局变量

 命名空间

 

var a = "a";
function f() {
    var b = "b";
    function g() {
        var c = "c";
        console.log(a+b+c);
    }
}
f();

 

 

 垃圾回收

 释放从全局对象无法到达的量

 不用在意 

   
   
   
   
   
   
   
   
   
   
 闭包
   JavaScript的所有函数都是闭包
 闭包内部可以有函数(闭包)
 应用  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 命名空间
   
 用对象管理程序本地代码  
 用函数管理  +function () { ... } (); 




   
   
   
   

 

 用对象管理程序本地代码  
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)

 

 caller  呼出现在运行的函数的函数
 length  参数表长度
 name  函数名
 prototype

 prototype对象

 apply()

 指定this和参数运行函数

 参数用数组指定 

function test(a, b) { ... }
test.apply(thisTarget, [a, b]);

 

 call()

 指定this和参数运行函数

 参数以正常函数呼出形式指定

test.apply(thisTarget, a, b);

 

 bind()

 把函数的this绑定指定对象, 返回生成的新函数

function test() { return this.name }
var tom = { name: "none" };
var newTest = test.bind(tom);

 

 constructor()  Function constructor的参照
 toString()  把函数源代码以String形式返回
   

 

 

 添加自定义属性  
function test() {...}
test.newProperty = "sample"; // 和其他对象添加属性一样写法

 

   
   
   
   
   
   
   
   
   
   
   
   
   
 高阶函数
 定义  以函数为参数或返回值的函数
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 回调函数
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 ES6关于函数的扩张
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

 

posted @ 2017-10-09 14:20  懒虫哥哥  阅读(132)  评论(0编辑  收藏  举报