javascript--函数总结

basic
  • function的实质是对象,函数名只是指向函数对象
  • 函数定义:
function fName(param1, param2, …) {
    //function body
}
  • 函数可以赋值给一个变量,叫作函数表达式
var fun1 = function() {} // 匿名函数
var showDiv = fun1;
  • 另一种定义方式:e.g. var washCar = new Function(carType, carNumber)
    • 可以动态生成函数,但不推荐,因为这种生成函数方式会影响性能,浏览器需要解析字符串和解析函数定义代码
  • 函数定义在代码执行前就完成了在context中的加载(这个过程叫function declaration hoisting),而函数表达式当运行时才会去进行加载
    • 所以函数表达式的一个常见错误是在函数声明前进行调用
  • 没有重载,没有函数签名,只是一个函数名而已,重名的函数后者覆盖前者
  • 函数可以作为参数值,也可以作为函数返回值
  • 作为参数传入时注意,加()是将函数的执行结果传入, 不加()是将函数本身传入
var fun1(){...};
var fun2(b){...};
fun2(fun1);
fun2(fun1());
  • 函数参数:
    参数为原始数据类型–值传递
    参数为对象类型–引用传递
  • arguments对象存储了函数的传入参数值
  • arguments中有一个对象callee指向拥有arguments的函数,即当前函数(strict mode下禁用)
  • arguments.callee.caller 调用当前函数的函数(strict mode下禁用)
    对于strict mode还有,全局函数中this指向window对象(strict mode下为undefined)
  • 通过自我执行来执行匿名函数, 任何匿名函数都是属于window对象
(function(){
   console.log(this === window);//true
})();
  • 动态创建函数
var area = new Function("x", "y", "var area ; area = x*y;return area;");
area(2, 3)
  • 回调函数
 $("div").show(500, function () {
    $("div").hide();
});
  • 函数的递归
function factorial(num) {
    if (num <= 1) {
        return 1;
    } else {
        return num * arguments.callee(num - 1);
    }
}

var factorial = (function f(num) {
    if (num <= 1) {
        return 1;
    } else {
        return num * f(num - 1);
    }
});
  • 闭包
    是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量。当一个函数嵌套了另外一个函数,外部函数将嵌套的函数作为返回值。
properties and methods
  • length: 期待的参数个数
var car = {color: "red"};
function printColor(car) {
    console.log(printColor.length);
}
  • apply()
  • call(): call(this, arg1, arg2…)
  • bind()
var car = {color: "red"};
function washCar(car) {
    console.log(this.color || car.color);
}
function applyWashCar(car) {
    return washCar.apply(this, arguments);
}
function applyWashCar2(car) {
    return washCar.apply(this, [car]);
}
function callWashCar(car) {
    return washCar.call(this, car);
}
function bindWashCar(car) {
    return washCar.bind(car);
}

applyWashCar(car);
applyWashCar2(car);
callWashCar(car);
bindWashCar(car)(); // a new function instance; this 绑定到传入的参数对象上
  • 全局函数 Link
    • escape() unescape() (deprecated, replaced with encodeURI, encodeURIComponent)
    • eval()
      • 字符串转JSON对象
        eval("({a:1})");

        var fun1 = "function a() {}"
        var fun2 = "(function a() {})"
        var fct1 = eval(fun1)  // return undefined
        var fct2 = eval(fun2)  // return a function
* isFinite()
* isNaN()
* parseFloat()
* parseInt(str, radix)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值