创建: 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关于函数的扩张
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

【废弃】【WIP】JavaScript 函数的更多相关文章

  1. 【JS小技巧】JavaScript 函数用作对象的隐藏问题

    用户反馈 @消失的键盘 在论坛反馈了一个问题,在 AppBoxMvc 中的 Title 模型中,如果将 Name 属性改名为小写的 name 属性,就会报错: 因为这是一个 ASP.NET MVC 的 ...

  2. 【JS小技巧】JavaScript 函数用作对象的隐藏问题(F.ui.name)

    用户反馈 @消失的键盘 在论坛反馈了一个问题,在 AppBoxMvc 中的 Title 模型中,如果将 Name 属性改名为小写的 name 属性,就会报错: 因为这是一个 ASP.NET MVC 的 ...

  3. 专题8:javascript函数详解

    函数是一段可以反复调用的代码块.函数还能接受输入的参数,不同的参数会返回不同的值. 函数的声明 JavaScript 有三种声明函数的方法. (1)function 命令 function命令声明的代 ...

  4. ABP(现代ASP.NET样板开发框架)系列之21、ABP展现层——Javascript函数库

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project ...

  5. JavaScript权威设计--JavaScript函数(简要学习笔记十一)

    1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...

  6. JavaScript 函数

    JavaScript 函数 介绍:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块.嗯,就像Java中封装的方法一样. 将脚本编写为函数,就可以避免页面载入时执行该脚本. 函数包含着一些代码 ...

  7. javascript 函数初探 (一)--- 神马是函数

    神马是函数? 所谓函数,本质上是一种代码的分组形式.我们可以通过这种形式赋予某组代码一个名字,以便与之后的调用.下面,我们来示范以下函数的声明: function sum(a, b){ var c = ...

  8. JavaScript函数的概念

    函数是这样的一段代码,它只定义一次,但可能被执行或调用任意多次. JavaScript函数是参数化的:函数的定义会包含形参,这些参数在函数的整体中像局部变量一样工作.函数调用时会为形参提供实参的值.除 ...

  9. Javascript函数重载,存在呢—还是存在呢?

    1.What's is 函数重载? );//Here is int 10 print("ten");//Here is string ten } 可以发现在C++中会根据参数的类型 ...

  10. JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别

    函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...

随机推荐

  1. Python反射、异常处理

    反射 :字符串到对象属性的映射 hasattr(obj,string), 判断对象obj里面是否有叫string的字段或方法 getattr(obj,string) 获取obj对象里名叫string的 ...

  2. Python随笔day03

    温故知新: 注释: 单行注释   # 多行注释   ‘’’ ‘’’  或者  “””  “”” 注意:三个单引号或双引号可以用于表示多行字符串. 判断输入的字符串是否是数字 salary = inpu ...

  3. stall and flow separation on airfoil or blade

    stall stall and flow separation Table of Contents 1. Stall and flow separation 1.1. Separation of Bo ...

  4. 438D - The Child and Sequence

    D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input st ...

  5. Elasticsearch使用总结

    原文出自:https://www.2cto.com/database/201612/580142.html ELK干货:http://www.cnblogs.com/xing901022/p/4704 ...

  6. nyoj_116_士兵杀敌(二)_201404131107

    士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常 ...

  7. - > 贪心基础入门讲解四——独木舟问题

    n个人,已知每个人体重,独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟? 分析: 一个显然的策略 ...

  8. Android: MediaRecorder start failed

    在某些机型上,MediaRecorder在调用start方法时,会出现start failed的错误,有一种可能是setVideoFrameRate导致的.要解决这个问题,只需要注释掉这条语句就可以了 ...

  9. Redhat 6.1安装ArcGIS Server10.1

    http://blog.csdn.net/linghe301/article/details/7762985 操作环境:Redhat 6.1 Linux 安装ArcGIS Server10.1之前,还 ...

  10. golang中select case 的用途到底是啥

    https://nanxiao.gitbooks.io/golang-101-hacks/content/posts/select-operation.html ------------------- ...