zoukankan      html  css  js  c++  java
  • javascript基础:函数参数与闭包问题

    今天在写东西的时候,对函数参数的概念有些模糊,查阅相关资料后,在博客上记点笔记,方便日后复习。

    首先,在js中函数参数并没有强语言中那么要求严格,他不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数。原因是:ECMAScript中的参数在内部都是用一个数组来表示的

    函数的显式参数与隐式参数

    • 函数的显式参数是在函数定义时列出的,比如:

    function hello(arg1,arg2){

    //函数体

    此时的arg1,arg2就是函数的显式参数

    • 函数的隐式参数在函数调用时传递给函数真正的值

    Es6中如果函数在调用时,未提供隐式参数,参数会默认设置为:undefined

    参数规则:

    其实前面已经谈到了,这里在列出来:

    • js函数定义显式参数时没有进行类型检测
    • js函数对隐式参数没有进行类型检测
    • js函数对隐式参数的个数没有进行检测

    闭包:

    有权访问另一个函数作用域中的变量的函数,创建闭包的常见方式,是在一个函数内部创建另一个函数,比如:

    function makeName() {
        var name = "Mozilla"; // name 是一个被 init 创建的局部变量
        function displayName() { // displayName() 是内部函数,一个闭包
            alert(name); // 使用了父函数中声明的变量
        }
        displayName();
    }
    makeName();//Mozilla
    
    

     上述代码就是在makeName内部创建了一个displayName函数,而displayName可以调用父级函数的参数.

    闭包用途:

    - 读取函数内部的变量

    - 让这些变量始终保存在内存中

    注意点:

    -在退出函数之前,将不适用的局部变量全部删除,避免内存消耗

    -闭包会在父函数外部,改变父函数内部变量的值,把父函数当作对象使用,把闭包当作它的公用方法,把内部变量当作的它私有属性,不要随便改变父函数内部变量的值

    两个高程上的例子,理解闭包:

    var name = "The Window";   
    var object = {   
        name : "My Object",   
        getNameFunc : function(){   
          return function(){   
            return this.name;   
         };   
        }   
    };   
    alert(object.getNameFunc()());  //The Window
    其中object.getNameFunc()本身是来自object对象的方法,其返回值时一个函数
    object.getNameFunc()()就是前者返回的函数,它本身的返回值时this.name

  • 相关阅读:
    移动端
    移动端
    Jmeter-接口功能测试
    Jmeter-连接 MySQL数据库
    Jmeter-安装与配置
    postman接口功能测试
    移动端
    移动端
    loadrunner实战篇
    【转载】格式化存储装置成为 Ext2/Ext3/Ext4 档案系统
  • 原文地址:https://www.cnblogs.com/yuan233/p/10289586.html
Copyright © 2011-2022 走看看