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

首先,在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

javascript基础:函数参数与闭包问题的更多相关文章

  1. 深入理解javascript函数参数与闭包(一)

    在看此文章,希望先阅读关于函数基础内容 函数定义与函数作用域 的章节,因为这篇文章或多或少会涉及函数基础的内容,而基础内容,我放在函数定义函数作用域 章节. 本文直接赘述函数参数与闭包,若涉及相关知识 ...

  2. 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

    [源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...

  3. python基础—函数嵌套与闭包

    python基础-函数嵌套与闭包 1.名称空间与作用域 1 名称空间分为: 1 内置名称空间   内置在解释器中的名称 2 全局名称空间   顶头写的名称 3 局部名称空间 2 找一个名称的查找顺序: ...

  4. Python基础-函数参数

    Python基础-函数参数 写在前面 如非特别说明,下文均基于Python3 摘要 本文详细介绍了函数的各种形参类型,包括位置参数,默认参数值,关键字参数,任意参数列表,强制关键字参数:也介绍了调用函 ...

  5. 【javascript基础】8、闭包

    前言 函数和作用域啥的我们前面已经了解了,现在就要学习闭包了,这是一个挺晦涩的知识点,初学者可能会感觉不好理解,但是高手都不不以为然了,高手就给我提点意见吧,我和新手一起来学习什么是闭包. 例子 先不 ...

  6. JavaScript基础函数和词法分析以及常用的内置对象和使用方法(4)

    day52 参考:https://www.cnblogs.com/liwenzhou/p/8004649.html 函数 函数定义 JavaScript中的函数和Python中的非常类似,只是定义方式 ...

  7. JavaScript的函数和作用域闭包

    1. 函数 1.1 定义函数 function add(x, y){ return x + y; } 上述函数定义如下: 关键字function指出这是一个函数定义: add是函数的名称: (x, y ...

  8. JavaScript基础函数---李老师的

    <!DOCTYPE html><html><head>    <title>demo2html</title>    <meta ch ...

  9. Learn day4 函数参数\变量\闭包\递归

    1.函数描述 # ### 函数 """ (1)函数的定义: 功能 (包裹一部分代码 实现某一个功能 达成某一个目的) (2)函数特点: 可以反复调用,提高代码的复用性,提 ...

随机推荐

  1. Python基础4 迭代器、装饰器、软件开发规范

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  2. 02.设计模式_NullObject模式

    使用NULL OBJECT模式,我们可以确保返回的总是有效的对象,即使失败时也代表对象什么也不做. 下面以一个数据库查询的示例来演示空对象模式. 1.Employe实体对象空对象的接口 Employe ...

  3. 通过Sonar的代码质量报告学习【如何写安全高质量的代码】

    1.不要用.size(),改用isEmpty() Using Collection.size() to test for emptiness works, but using Collection.i ...

  4. flex 上下div固定, 中间div自适应

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. DLL创建与调用(C#调用C++的DLL)

    1.C++中需要导出的函数,函数定义处在返回值前加上:extern "C" __declspec(dllexport) C#调用:[DllImport("导出函数所在DL ...

  6. golang使用Nsq(转)

    为什么要使用Nsq 最近一直在寻找一个高性能,高可用的消息队列做内部服务之间的通讯.一开始想到用zeromq,但在查找资料的过程中,意外的发现了Nsq这个由golang开发的消息队列,毕竟是golan ...

  7. 尚硅谷springboot学习21-web开发-处理静态资源

    SpringBoot对静态资源的映射规则 @ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFi ...

  8. [PHP]自定义session存储机制的两种方案

    ---------------------------------------------------------------------------------------------------- ...

  9. 一个关于EasyUI超恶心的BUG。。。Cannot read property 'options' of undefined

    控制台Console抛出的异常: jquery.easyui.min.js:9148 Uncaught TypeError: Cannot read property 'options' of und ...

  10. thread == 售票

    import org.apache.xerces.util.SymbolTable; public class ThreadDemo1 { public static void main(String ...