zoukankan      html  css  js  c++  java
  • js学习——函数

    函数声明

    function funName(parameter){}

    函数表达式,并把函数存储在变量x中

    //不用给函数名,后续并不能直接用给定的函数名调用
    var x = function(a){return a};
    x;//返回的是一个函数对象
    x();//调用函数

    用函数构造函数定义一个函数(参数, 表达式)

    var myFunc = new Function("a", "b", "return a + b");

    函数提升:声明会自动提前,赋值的不提升

    myFunc(10);
    function myFunc(x){return x;}

    函数自动调用自己执行

    (function callSelf(){alert("i call myself");})();

    函数是对象

    function myFunc(){};typeof myFunc;//类型为 function

    显式参数:形参(类似C++)      隐式参数:实参(类似C++)

    参数规则:对隐式参数不进行类型检测,也不进行个数检测

    默认参数:如果没有给隐式参数,那么显式参数的值为undefined

    function myFunc(x)
    {
        x = x||0;//若x是undefined,则将其值设为0
    }

    arguments对象:function的内置属性

    function myFunc()
    {
        var n = arguments.length;//参数的个数
        //遍历输出每一个参数
        for(var i = 0; i < n; i++)
        {
             alert(arguments[i]);
        }
    }

    参数传递:按值传递(C++)

    //不是对象的是按值传递
    var a = 0;
    function ma(a){a = 4;}
    ma(a);//结果没有变化
    //隐式参数是按值传递
    var c = [1,2,3];
    function mc(){arguments[0] = 3;}
    mc(c);//c的值没有变化

    参数传递:按引用传递(C++)这个概念有点问题,还要再研究一下

    var b = [1,2,3];
    //显示参数,且参数是一个对象
    function mb(b){b[0]=3;};
    mb(b);//b的值发生变化

    函数调用,有4种调用方式,区别在于this的初始化

    this指向调用函数的对象

    //作为一个函数调用
    function myFunc()
    {
        return this;
    }
    //返回window对象,因为默认属于window全局对象
    myFunc();
    //作为对象的方法调用
    var myObj={
        myFunc:function(){return this;}
    };
    myObj.myFunc();//返回myObj对象:Object {myFun: function}
    //用构造函数调用函数,构造函数中的this没有任何值
    function myFunction(){return this;}
    //this指向实例化后的对象:myFunction{}
    var myFunc = new myFunction();
    //作为函数方法调用函数
    function myFunction(a,b,c){return this;}
    //第一个参数myObj会成为this
    var a = 0, b = 0, c = 0;
    myObj = myFunction.call(myObj, a, b, c);//按参数一个个对应给出
    var arr = [0, 0, 0];
    myObj = myFunction.apply(myObj, arr);//参数组合成一个数组

    js闭包(python中也类似)

    可访问上一层函数作用域里变量的函数

    var add = (function() {
        var counter = 0;
        return function() { return counter += 1; };
    })();//自调用函数
    add();
    add();//计数器会递增
    var x = function(){return function(){alert("abc");};};
    x; //function(){return function(){alert("abc");};};
    x(); //function (){alert("abc");}
    x()();//会执行alert("abc")
  • 相关阅读:
    (Java) LeetCode 44. Wildcard Matching —— 通配符匹配
    (Java) LeetCode 30. Substring with Concatenation of All Words —— 与所有单词相关联的字串
    (Java) LeetCode 515. Find Largest Value in Each Tree Row —— 在每个树行中找最大值
    (Java) LeetCode 433. Minimum Genetic Mutation —— 最小基因变化
    (Java) LeetCode 413. Arithmetic Slices —— 等差数列划分
    (Java) LeetCode 289. Game of Life —— 生命游戏
    (Java) LeetCode 337. House Robber III —— 打家劫舍 III
    (Java) LeetCode 213. House Robber II —— 打家劫舍 II
    (Java) LeetCode 198. House Robber —— 打家劫舍
    (Java) LeetCode 152. Maximum Product Subarray —— 乘积最大子序列
  • 原文地址:https://www.cnblogs.com/coolqiyu/p/7087917.html
Copyright © 2011-2022 走看看