创建: 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. Springboot2.0中jpa默认创建的mysql表为myisam引擎问题

    使用Springboot2.0后,使用jpa操作mysql数据库时,默认创建的表的引擎是myisam,myisam是不能加外键的,找了一些资源,最终可以用此方法解决! yml格式: spring: j ...

  2. String HDU 5672(双指针)

    String HDU 5672(双指针) 传送门 题意:一个字符串中找到所有拥有不少于k个不同的字符的子串. import java.io.*; import java.util.*; public ...

  3. scanf与getchar

    如下: 5  5 R  R  R  R  R R  R  R  R  R R  R  R  R  R R  R  R  R  R R  R  R  R  R 只允许用scanf,如何写读取函数. 由于 ...

  4. IOC容器Autofac使用

    今天我沉浸在IOC的设计模式追求中,听了很多课,也看了很多例子,这个是我的一个测试项目 为了测试代码,我首先准备了两个类一个Car和接口ICar,这两个类和我们平时项目中的DAL与IDAL相似,现在我 ...

  5. 小数化分数的O(log2n)解法

    具体约束: 给定一个小数x,x满足0<=x<1,且保证给定的x保留了18位小数 输出一个分数,使得分母不超过1e9,分子分母互质,且在满足这些条件的情况下最接近x 了解一下法雷数列和ste ...

  6. ceph 简介

    Ceph 存储集群 数据的存储 伸缩性和高可用性 CRUSH 简介 集群运行图 高可用监视器 高可用性认证 智能程序支撑超大规模 动态集群管理 关于存储池 PG 映射到 OSD 计算 PG ID 互联 ...

  7. [luoguP1417] 烹调方案(背包DP)

    传送门 By tinylic 如果没有b[i]这个属性的话就是明显的01背包问题. 现在考虑相邻的两个物品x,y.假设现在已经耗费p的时间,那么分别列出先做x,y的代价: a[x]-(p+c[x])* ...

  8. sheepdog简介

    1.corosync,single ring最多支持50个节点:zookeeper,500个节点可稳定支撑,1000-1500个节点挑战比较大,需要优化消息传递机制. 2.sheepdog一开始为分布 ...

  9. 通过JQUERY获取SELECT OPTION中选中的值

    遇到一样学一样. 一个是取KEY,一个是取VALUE,一个是取所有文本. var dbuser_select = $("#dbuser_select option:selected" ...

  10. POJ——T3417 Network

    http://poj.org/problem?id=3417 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5294   A ...