一、函数

  函数声明、函数表达式、匿名函数

    函数声明:使用function关键字声明一个函数,再指定一个函数名,叫函数声明。function name () { … }

    函数表达式:使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式。var name = function(){ ... }

    匿名函数:使用function关键字声明一个函数,但未给函数命名,所以叫匿名函数。function () { ... }

  调用时的区别

name();  //正常,因为‘提升'了函数声明,函数调用可在函数声明之前
function name(){ ... }name();   //报错,变量name还未保存对函数的引用,函数调用必须在函数表达式之后
var name=function(){ ... }

  函数参数传递方式:按值传递

  我们知道,函数的参数在进入函数后,实际是被保存在了函数的变量对象中,因此,这个时候相当于发生了一次复制。

var a = 20;
function fn(a) {a = a + 10;return a;
}
fn(a);
console.log(a); // 20var a = { m: 10, n: 20 }
function fn(a) {a.m = 20;return a;
}
fn(a);
console.log(a);   // { m: 20, n: 20 }

  函数参数传递方式是按值传递,只不过当我们期望传递一个引用类型时,真正传递的,只是这个引用类型保存在变量对象中的引用而已。

二、立即执行函数

  两种javascript立即执行函数的常见写法。

(function(){…
})()  //(...)()形式(function(){…
}())  //(...())形式

  在函数的后面加上括号,就能变成立即执行函数吗?

  1.函数表达式后面加括号

var name=function(){alert('Hello World');
}();  //函数表达式。后面加括号,当javascript引擎解析到此处时能立即调用函数

  2.匿名函数后面加括号

function(){console.log('Hello World');
}();  //匿名函数方式。后面加括号,报语法错误。虽然匿名函数属于函数表达式,但是未进行赋值操作,所以javascript引擎将开头的function关键字当做函数声明,报错:要求需要一个函数名。

  3.函数声明方式后面加括号

function name(){alert('Hello World');
}();  //函数声明方式,此时相当于对匿名函数加了名字。后面加括号,还是报错,Uncaught SyntaxError: Unexpected token )。在一个表达式后面加上括号(),该表达式会立即执行,但是在一个语句后面加上括号(),它的意思只是分组操作符。

function name(){
    alert('Hello World');
  }(1); //如果在括弧()里传入一个表达式,将不会有异常抛出.但是函数依然不会执行。因为它完全等价于,在一个function声明后面,又声明了一个毫无关系的表达式

  回头看看( function(){…} )()和( function (){…} () ),要在函数体后面加括号就能立即调用,则这个函数必须是函数表达式,不能是函数声明。

  所以只需要用大括弧将代码括住就行了,因为JavaScript里括弧()里面不能包含语句,所以在这一点上,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function声明。

(function(a){console.log(a);   //123
})(123);   //后面括号里传入了函数执行的参数。如果这个参数是外部的变量,将会形成闭包。这个变量也会保存在这个函数中。

三、模块

  提到立即执行函数,总会想到模块,因为模块通常用立即执行函数的方式去创建。

  一个模块可以包括:私有变量、私有方法、公有变量、公有方法。

(function() {// 私有变量var age = 20;var name = 'Tom';// 私有方法function getName() {return `your name is ` + name;}// 公有方法function getAge() {return age;}// 将公有方法引用保存在外部执行环境的变量中,形成闭包,防止该执行环境被垃圾回收window.getAge = getAge;
})();

  

转载于:https://www.cnblogs.com/lishuxue/p/6588234.html

JS进阶之---函数,立即执行函数相关推荐

  1. js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么

    js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么 一.总结 一句话总结:两者都是对表单进行序列化,serializeArray()返回的是json ...

  2. js 和jQuery(自动执行函数)立即执行函数和页面加载完后执行函数写法

    js 立即执行函数的写法. js 立即执行函数只能用于匿名函数,如果声明了函数名是不可以用立即执行的,通常在函数表达式后加一对小括号()用于立即执行 如果想让函数不被调用的情况下,立即自动执行,需要在 ...

  3. php for循环执行函数,自执行函数用for结束后面不能访问循环变量

    摘要:<?php $arr=[8,15,59,60,75,88];$r=0;foreach ($arr as $k=>$v) {$x = $v;$r += $x;echo $v.'_'.$ ...

  4. cycle函数python_Python执行函数的周期实现

    如下python代码是关于Python执行函数的周期实现,需要使用time模块及sched和os模块方法. 首先导入方法模块 #coding=utf-8 import time,sched,os 初始 ...

  5. html开始就执行某函数,立即执行函数.html

    立即执行函数,可做框架 (function(w,d){ var readyRE=/loaded|complete|interactive/;//检测网页是否加载完成的与正则表达式 // var $=f ...

  6. JavaScript自执行函数,自执行函数是什么,存在的意义?

    JavaScript自执行函数 1.自执行函数是什么 2.自执行函数存在的意义 2.1封装 3.自执行函数两种常见的的写法 3.1自执行函数的第一种写法 3.2自执行函数的第二种写法 4.自执行函数的 ...

  7. js关于setTimeout实现延时执行函数并进行传参

    传参方式一:setTimeout第一个参数可以是一段JS的代码字符串片段,第二个参数为延迟时间单位ms <script> function ab() { var a=1; var b =1 ...

  8. Python 进阶 —— 使用修饰器执行函数的参数检查

    参数检查:1. 参数的个数:2. 参数的类型:3. 返回值的类型. 考虑如下的函数: import htmldef make_tagged(text, tag):return '<{0}> ...

  9. js中怎么写自执行函数

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

  10. 在网页中JS函数自动执行常用三种方法

    <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! al ...

最新文章

  1. 中国铁建内网漫游沦陷多个重要部门泄漏大量信息(redis+ssh-keygen免认证登录案例)...
  2. 11.28 软件工程概论psp
  3. mysql通用查询日志_MySQL通用查询日志(GeneralQueryLog)_MySQL
  4. BUUCTF-WEB:[极客大挑战 2019]Havefun 1
  5. mysql创建索引小案例
  6. HashMap在java并发中如何发生死循环
  7. 【Python 必会技巧】三元表达式(三目运算符)
  8. php spss,spss新手入门
  9. 打开stl文件_介绍一种修复、查看以及打印STL三维模型文件的工具
  10. 控制文件夹递归深度_TensorFlow、Pytorch和Keras的样例资源(深度学习初学者必须收藏)...
  11. VUE3@/cli数据交互(axios)
  12. Quartz的集群模式和单机模式共存-让一个非集群的Quartz与集群节点并行着运行
  13. 在SQL-SERVER2000中对同一个数据库多张表进行查询时怎样避免笛卡儿乘积???...
  14. Python 宽学网
  15. 【Ansible】非完全离线安装Ansible和Ansible-tower
  16. Linux操作系统感想
  17. asp.net + MVC5 入门完整教程一
  18. 计算机相关各机构简称
  19. matlab凑数求和,excel自动凑数求和 使用规划求解来解决excel自动凑数求和的方法...
  20. Android 手机震动功能实现

热门文章

  1. 服务器与本地文件共享文件夹,云服务器对本地服务器共享文件夹
  2. uva 1615——Highway
  3. C++ 向上转型初步01
  4. linux 编译3g驱动_linux下使用3G拨号上网 以及3g驱动设置
  5. ubuntu修改root密码
  6. P1092虫食算-深度优先搜索+玄学剪枝
  7. 信道分配 以太网
  8. Linux串口阻塞与非阻塞
  9. 【Linux系统编程学习】 文件描述符
  10. 103. 二叉树的锯齿形层次遍历