创建: 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. EXP-00083: 调用 EXFSYS.DBMS_EXPFIL_DEPASEXP.schema_info_exp 时出现前一问题

    select owner,object_name,object_type,status from dba_objects where object_name = 'LT_EXPORT_PKG'; 如果 ...

  2. 集合类(Collection和Map接口)简介

    集合分为Collection和Map,详细分类如下图所示: 以下是测试验证代码: //HashSet,无序(存取不一致).去重 Set set_H = new HashSet(); set_H.add ...

  3. knockout.js--基本用法

    1,HTML元素的面向对象的赋值,数据绑定 text绑定:为p,span,div,td等加text属性值(即元素内部显示的文本), value绑定:为input添加value属性值, attr绑定:为 ...

  4. ISO7220M芯片调试总结

    3.3V或者5V供电        速度可以达到150Mbps      有25年的寿命 调试问题总结: 在调试中发现,芯片焊接的时候很容易损坏,甚至350度焊接,时间在5s的时间都会坏掉.当坏掉的时 ...

  5. 第一个Maven工程的目录结构和文件内容及联网问题

    [第一个Maven工程] ①目录结构 Hello |---src |---|---main |---|---|---java |---|---|---resources |---|---test |- ...

  6. Java中list集合ArrayList 中contains包含的使用

    Java中list集合ArrayList 中contains包含的使用 https://blog.csdn.net/qq_38556611/article/details/78774690

  7. hdu 2545 并查集 树上战争

    #include<stdio.h> #include<string.h> #define N 110000 struct node {     int father,count ...

  8. T1081 线段树练习 2 codevs

    http://codevs.cn/problem/1081/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数, ...

  9. 基于QQ服务器JavaMail邮箱SSL密码第三方发送邮件

    网上javaMail邮箱推送代码太多,大都是有缺陷的,今天做项目刚好要用到,于是发了大半天的时间解决的这个问题. jar包:javax.mail.jar 代码: import java.io.IOEx ...

  10. [转] python 获取本机ip地址的两种实现方法

    #!/usr/bin/python import socket import fcntl import struct def get_ip_address(ifname): s = socket.so ...