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

转载于:https://www.cnblogs.com/lancgg/p/8281703.html

【废弃】【WIP】JavaScript 函数相关推荐

  1. JavaScript函数和BOM及DOM编程(详细总结-无尿点)

    JavaScript函数和BOM及DOM编程(详细总结-无尿点) javascript 函数 一.javascript函数 1.1 概述 1.2 常见的系统函数 1.2.1 eval 1.2.2 pa ...

  2. 深入理解javascript函数系列第二篇——函数参数

    前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数.本文是深入理解javascript函数 ...

  3. 怎样在javascript函数中将变量传递给服务端脚本程序?

    怎样在javascript函数中将变量传递给服务端脚本程序? (有朋友问上述问题, 愿把结论分享给大家). 摘 要:   服务器端脚本运行时, 它只会解释执行<% %>或<?php ...

  4. 史上自定义 JavaScript 函数Top 10

    史上自定义 JavaScript 函数Top 10 http://www.dustindiaz.com/top-ten-javascript/     发布:wpulog | 发布时间: 2010年4 ...

  5. HTML和JavaScript函数之间的关系

    在javaScript中有两类函数,一个是自定义的函数,一个是JavaScript中的函数.在HTML中javaSrcipt能和HTML完全的融合,也就是我们的JavaScript系统函数能直接的应用 ...

  6. python 调用 javascript函数

    python 调用 javascript函数 # pip install pyexecjs import execjs # 直接执行 print('execjs.eval:', execjs.eval ...

  7. 现代 JavaScript 函数库 usuallyjs 的安装和使用

    usuallyjs usuallyjs 是一个面向现代 Web 开发的 JavaScript 实用函数库. usuallyjs 基于 ES6 开发,抛弃了传统 Web 开发中 DOM 和 BOM 操作 ...

  8. Javascript函数执行、new机制以及继承

    JS函数执行 一个JavaScript函数fn,被执行有三种途径: fn() new fn() fn.call()或fn.apply() new机制以及继承 JavaScript中定义了一种对象,称之 ...

  9. Javascript函数的简单学习

    第九课 函数的定义与调用 1:函数的定义     语法格式     function 函数名(数据类型 参数1){//function是定义函数的关键字         方法体;//statement ...

  10. 主页面调用iframe里面匿名Javascript函数的问题

    2019独角兽企业重金招聘Python工程师标准>>> 这个问题出现已经几天了,今天终于解决了,特此记录下来. 问题的出现始于我在HTML5下采用Reveal.js来播放PPT和使用 ...

最新文章

  1. 「情报局41」人工智能的下一个目标是什么?了解业务用例
  2. Vue-Router API参考
  3. Primality Test 素数,打表
  4. Soring冲刺计划第三天(个人)
  5. latex自动生成中文目录_texpad: 中文输出+自动参考文献生成(bib+bst)
  6. 《Adobe Photoshop CS6中文版经典教程》—第1课1.4节在Photoshop中还原操作
  7. Xen 安装ubuntu xen DomU
  8. 用原生js写一个多动症的简历
  9. python微信推送{u‘errcode‘: 40008, u‘errmsg‘: u‘invalid message type rid: 6111061f-19703d5b
  10. oracle dataguard 日志传输,从alert日志看Oracle 11g DataGuard日志传输
  11. Linux进程调度策略
  12. NLTK的安装/对象/词库/分词/词性标注/分块
  13. LibPcap丢包问题
  14. 银行卡卡号基于Luhn算法的格式校验
  15. 人民日报喊你学数学!实力不允许?8本书带你入门
  16. 如何学计算机打字,电脑怎么学打字
  17. 详述TCP协议中重要的知识点
  18. 聚类分析在用户行为中的实例_聚类分析案例
  19. 【实战】Spring+Spring MVC+Mybatis实战项目之云笔记项目
  20. 旷厂练习生 Vol.15 | CV 小白在旷视 4 个月就能写顶会 paper?来听听机甲大师 Albert 的故事!...

热门文章

  1. Python GUI漫谈
  2. mysql forget the password
  3. Web安全***测试之信息搜集篇
  4. DataGridView 判断新增行:
  5. Oracle Profile 使用详解
  6. 在IIS中写Python的CGI脚本
  7. 用掘金-Markdown 官方语法总结大全
  8. Oracle表记录字节长长度的两种计算方式
  9. 《你不知道的JavaScript》整理(四)——原型
  10. 在eclipse里配置Android ndk环境 适用于windows mac 和linux[转]