javascript-基础-函数
函数
//声明
function myFunction(a, b) {
    return a * b;
}
//函数表达式,变量也可作为函数
var x = function (a, b) {return a * b};
var z = x(4, 3);
//Function() 构造函数(不推荐)
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
函数提升:声明方式定义的函数,可在定义之前使用;但是表达式函数无法提升
自调用
(function () {
    document.getElementById("demo").innerHTML = "Hello! 我是自己调用的";
})();
函数是对象
有自己的属性和方法
//arguments.length返回调用过程接收到的参数个数
function myFunction(a, b) {
    return arguments.length;
}
//toString() 方法将函数作为一个字符串返回
function myFunction(a, b) {
    return a * b;
}
var txt = myFunction.toString();
函数参数
没有参数检查
两种参数
- 显式Parameters
- 隐式Arguments
显式Parameters设置默认值为undefined,建议手动设置一个默认值
function myFunction(x, y) {
    y = y || 0;
}
隐式Arguments
x = findMax(1, 123, 500, 115, 44, 88);
 
function findMax() {
    var i, max = arguments[0];
    
    if(arguments.length < 2) return max;
 
    for (i = 0; i < arguments.length; i++) {
        if (arguments[i] > max) {
            max = arguments[i];
        }
    }
    return max;
}
值传递与对象传递
http://www.runoob.com/js/js-function-parameters.html
函数调用
函数属于html对象,就是windows
function myFunction(a, b) {
    return a * b;
}
window.myFunction(10, 2);    // window.myFunction(10, 2) 返回 20
函数没有被自身对象调用,this返回全局对象,也就是window
function myFunction() {
    return this;
}
myFunction();                // 返回 window 对象
函数作为方法调用
var myObject = {
    firstName:"John",
    lastName: "Doe",
    fullName: function () {
        return this.firstName + " " + this.lastName;
    }
}
myObject.fullName();         // 返回 "John Doe"
fullName是一个方法,而this返回的是myObject对象
new关键字重新创建对象,调用函数
// 构造函数:
function myFunction(arg1, arg2) {
    this.firstName = arg1;
    this.lastName  = arg2;
}
 
// This    creates a new object
var x = new myFunction("John","Doe");
x.firstName;                             // 返回 "John"
作为函数方法调用函数,函数也是对象,具有属性和方法
call() 和 apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身
function myFunction(a, b) {
    return a * b;
}
myObject = myFunction.call(myObject, 10, 2);     // 返回 20
function myFunction(a, b) {
    return a * b;
}
myArray = [10, 2];
myObject = myFunction.apply(myObject, myArray);  // 返回 20
apply传入的是数组,call传入的是具体参数
在 JavaScript 严格模式(strict mode)下, 在调用函数时第一个参数会成为 this 的值, 即使该参数不是一个对象。
在 JavaScript 非严格模式(non-strict mode)下, 如果第一个参数的值是 null 或 undefined, 它将使用全局对象替代。
闭包
变量声明时,如果不使用var,它是一个全局变量
函数内定义函数
function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();    
    return counter; 
}
闭包,能够使函数拥有私有变量
var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();
add();
add();
add();
// 计数器为 3
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号