,1,在javascript中,函数即对象。函数里面的参数可以是个函数,例如:

data.sort(function(a,b){return a-b;})

  函数的返回值,return语句导致函数停止执行,并返回它的表达式(如果有的话)的值给调用者。如果没有返回值的函数,就是没有return,就是返回 undefined值给调用者。没有返回值的函数有时候称为过程。

2,嵌套函数:

有趣之处在于他的变量作用域规则。就是函数里面可以嵌套一个函数。

3,函数调用:

作为函数;

作为方法(无非是保存在一个对象属性里面的javascript函数);

作为构造函数;

通过它们的call()和apply()方法间接调用。

方法和this关键字是面向对象编程范例的核心。任何函数只要作为方法调用,实际上都会传入一个隐式的实参---这个实参是一个对象。方法调用的母体就是这个对象。

var o = {
m:function(){
var self = this;
console.log(this === o);
f();
function f(){
console.log(this);
console.log(self === o);
}
}
}
执行 o.m()
结果:
true
false
true

 这里说明一点:嵌套函数里面的this指向问题:this的值是全局对象或者undefined,如果要用外层函数的上下文环境,则需要将this的值保存在一个变量self里面。 

4,方法链:

当方法的返回值是一个对象,这个对象还可以再调用它的方法,形成链式的调用方式。

当方法并不需要返回值时,最好直接返回this。如果 在设计的API中一直采用这种方式(每个方法都返回this)。使用API就可以进行“链式调用”,不要将方法的链式调用和构造函数的链式调用混为一谈。

5,构造函数的调用:

首先:如果构造函数没有形参,可以省略圆括号,

var o = new Object();
var o = new Object;

  这个两种写法是等价的。其次:new o.m();调用上下文不是o,而是这个新对象作为调用上下文。
       最后:函数的返回值,构造函数通常不使用return关键字。

6,可变长的实参列表:实参对象
当:实参列表 > 形参个数,没有办法获得未命名值的引用。参数对象解决了这个问题。在函数体内,arguments是指向实参对象的引用。实参对象是一个类数组对象。可以通过下标来访问实参值。不用非得通过名字来得到实参。
实参对象有一个重要的用处:就是让函数可以操作任意数量的实参。例如:

function max(){
var max = Number.NEGATIVE_INFINITY;
for(var i = 0;i<arguments.length;i++){
if(arguments[i] > max){
max = arguments[i];
}
}
return max;
}
var largest = max(1,10,100,2,3,1000,4,5,1003);//1003

  类似这种函数可以接收任意个数的实参。也称为:“不定实参函数”。

remember:arguments并不是真正的数组,而是一个实参对象。可以这样理解:它是一个对象,只是碰巧拥有以数字为索引的属性。

实参对象还定义了callee和caller属性。arguments.callee()属性指向当前正在执行的函数。caller是非标准的,单大多数浏览器都实现了这个属性。实用场景:匿名函数中通过callee来递归调用自身。

var factorial = function(x){
if(x <= 1) return 1;
return x*arguments.callee(x-1);
}
factorial(10) //这里就是一个10*9*8*7*6*5*4*3*2*1的方法,用的是递归 匿名函数的实现方式:
(function(x){
if(x <= 1) return 1;
return x*arguments.callee(x-1);
}(10)) //同样也是可以实现该递归的方法

7.将对象属性用作实参: 

当一个函数包含超过三个形参时,最好通过名/值对的形式来传入参数。这样参数的位置就无关紧要。而且这种写法允许在函数中设置省略参数的默认值。

JavaScript的函数(一)的更多相关文章

  1. JavaScript中函数函数的定义与变量的声明<基础知识一>

    1.JavaScript中函数的三种构造方式 a.function createFun(){ } b.var createFun=function (){ } c.var createFun=new ...

  2. 理解 JavaScript 回调函数并使用

    JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...

  3. 5种 JavaScript 调用函数的方法

    一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正理解Javascript函数是如何工作而导致的(顺便说一下,许多那样的代码是我写的).JavaScript拥有函数式编程的特性 ...

  4. javascript escape()函数和unescape()函数

    javascript escape()函数和unescape()函数 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 语法: escape(string) stri ...

  5. JavaScript调用函数的方法

    摘要:这篇文章详细的介绍了Javascript中各种函数调用的方法及其原理,对于理解JavaScript的函数有很大的帮助! 一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正 ...

  6. Javascript常用方法函数收集(二)

    Javascript常用方法函数收集(二) 31.判断是否Touch屏幕 function isTouchScreen(){ return (('ontouchstart' in window) || ...

  7. javascript工具函数

    第一部分 JavaScript工具函数 转义特殊字符为html实体   HtmlEncode: function(str){ return str.replace(/&/g, '&') ...

  8. [转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")

    javascript eval函数解析json数据时为什么 加上圆括号?为什么要 eval这里要添加 “("("+data+")");//”呢?   原因在于: ...

  9. javascript篇-----函数作用域,函数作用域链和声明提前

    在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的(也就是我们不能在代码段外直接访问代码段内声明的变量),我们称之为块级作用域,然而,不同于 ...

  10. JavaScript 常用函数总结

    javascript函数:  ·常规函数  ·数组函数  ·日期函数  ·数学函数  ·字符串函数 .cookie函数 1.常规函数 javascript常规函数包括以下9个函数:  (1)alert ...

随机推荐

  1. redis的集群:

    集群策略:主从复制哨兵集群 参考:https://blog.csdn.net/q649381130/article/details/79931791 集群又分为如下:客户端分片基于代理的分片路由查询参 ...

  2. Java操作redis客户端Jedis使用

    1.1   jedis介绍 Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java.C.C#.C++.php.Node.js.Go等. 在官方网站里列一些Java的客户端,有 ...

  3. vue element 全屏不好用问题

    Chrome71版本使用screenfull.js全屏功能时报参数错误   在生产环境长期使用的一个“全屏”功能突然失效了,查看Console 如下报错: Failed to execute 'req ...

  4. python语法基础-面向对象-进阶-长期维护

    ###############    @property定义属性    ############## # 所以对于定义属性你有好几种方式了和种类了,# 静态属性,动态属性, # property # ...

  5. 3dmax2012卸载/安装失败/如何彻底卸载清除干净3dmax2012注册表和文件的方法

    3dmax2012提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dmax2012失败提示3dmax2012安装未完成,某些产品无法安装,也有时候想重新安装3 ...

  6. 点分治——POJ 1741

    写的第一道点分治的题目,权当认识点分治了. 点分治,就是对每条过某个点的路径进行考虑,若路径不经过此点,则可以对其子树进行考虑. 具体可以看menci的blog:点分治 来看一道例题:POJ 1741 ...

  7. Angular开发者指南(七)依赖注入

    依赖注入 依赖注入(DI)是一种软件设计模式,处理组件如何获取其依赖关系. AngularJS注入器子系统负责创建组件,解析它们的依赖关系,并根据请求将它们提供给其他组件. 使用依赖注入 DI遍布An ...

  8. A 小石的签到题

    题目链接:https://ac.nowcoder.com/acm/contest/949/A 思路: 这题明确的说了是个签到题,但是一直怀疑不是签到题,是唬我的,结果仔细想了想真是这么回事. 每个人必 ...

  9. Java IO: PipedInputStream

    原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) PipedInputStream可以从管道中读取字节流数据,代码如下: 01 InputSt ...

  10. haproxy笔记之一:Haproxy基本安装配置(反向代理,类似Nginx,可以代理tcp的连接,不只是http)(注意iptables和selinux的问题)

    1.安装haproxy yum -y install haproxy 2.配置文件 # this config needs haproxy- or haproxy- global log 127.0. ...