创建: 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. Android 按钮常用点击事件大总结

    很多学习Android程序设计的人都会发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同.因此本文就把这些写法总结一下,比较下各种写法的优劣,希望对大家灵活地选择编码方式可 ...

  2. LeetCode141LinkedListCycle和142LinkedListCycleII

    141题:判断链表是不是存在环! // 不能使用额外的存储空间 public boolean hasCycle(ListNode head) { // 如果存在环的 两个指针用不一样的速度 会相遇 L ...

  3. 浮动和margin负值 三列布局

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. 【eclipse】外部 jar 包导入教程

    JavaWeb 项目中,可以直接将要导入的 jar 程序包复制到你项目下的 WEB-INF/lib 文件夹下,将来程序移动到别的机子上测试时也能正常运行.如果是普通 Java 工程的话,我们可以在项目 ...

  5. python virtualenv 虚拟环境的应用

    为什么要使用python的虚拟环境呢?: 首先我们来说不实用虚拟环境的情况: 在Python应用程序开发的过程中,系统安装的Python3只有一个版本:3.7.所有第三方的包都会被pip3安装到   ...

  6. BZOJ 5028 小Z的加油店

    [题解] 本题要求求出区间内的各个元素通过加减之后能够得出的最小的数,那么根据裴蜀定理可知答案就是区间内各个元素的最大公约数. 那么本题题意化简成了维护一个序列,支持区间加上某个数以及查询区间元素的最 ...

  7. 洛谷 3833 SHOI 2012 魔法树

    [题解] 树链剖分模板题.. #include<cstdio> #include<algorithm> #include<queue> #define N 5000 ...

  8. FJoi2017 1月20日模拟赛 交错和(等差数列+rmq)

    [题目描述] 无限循环数字串S由长度为n的循环节s构成.设s为12345(n=5),则数字串S为123451234512345… 设Si为S的第i位数字,在上面的例子中,S1=1,S2=2,S6=1. ...

  9. Spring SpEL 各种写法示例

    项目路径 先说一下三个bean都有哪些属性 Address.java private String city;//城市 private String street;//街道 Car.java priv ...

  10. 使用lombok提高编码效率-----不用写get set

    使用lombok提高编码效率-----不用写get    set https://blog.csdn.net/v2sking/article/details/73431364