JavaScript快速入门-ECMAScript函数
JavaScript函数(定义、参数、返回值、闭包、匿名函数)
一、函数定义
function functionName(arg0, arg1, ... argN) {
statements
}
函数是一组可以随时随地运行的语句。
函数是 ECMAScript 的核心。
函数是由这样的方式进行声明的:关键字 function、函数名、一组参数,以及置于括号中的待执行代码。
二、参数
普通参数:形参
特殊参数:arguments。类似python里面的sys.argv。同样有arguments.lenght,表示参数个数。
function func1(){
if(arguments[0]=='test'){
alert('haha'); }else{
alert('gaga');
}
}
func1('test');
三、返回值
除非明确指定返回值(return ***),否则返回值为undefined,同时返回空(return;)也是undefined。
function sayHi(sMessage) {
if (sMessage == "bye") {
return sMessage; #如果参数等于‘bye’,则返回bye。否则返回undefined。
}
}
var a = sayHi('aaa');
alert(a);
四、函数对象
在了解匿名函数前,需要了解一下函数对象。
var function_name = new function(arg1, arg2, ..., argN, function_body)
即函数的另外一种定义方式,通过声明函数的方式进行定义。其实,函数也是一种对象。
上面的函数我们也可以这样定义:
var sayHi = new Function("sName", "sMessage", "alert(\"Hello \" + sName + sMessage);");
注意:前面N个参数,最后面是函数体。这种形式写起来有些困难,但有助于理解函数只不过是一种引用类型,它们的行为与用 Function 类明确创建的函数行为是相同的。
函数对象的属性:
- length
函数对象的方法:
- valueOf() 方法
- toString() 方法
五、匿名函数
我们在python里面学习了lambda函数(匿名函数),比如定义:a=lambda x,y: x+y 调用:print a(1,3).
在JavaScript中基本上类似。
定义:
//1、 匿名函数-普通定义,无参数
var func = function(){
return ‘aaa’
}
alert(func()); //2、 匿名函数直接调用-无参数
(function(){
alert("tony");
} )() //3、匿名函数直接调用-有参数
(function(arg){
console.log(arg);
})('123')
六、作用域
作用域(基础知识)
在学习闭包之前,我们需要先了解JavaScript的作用域。几乎所有的编程语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。
作用域五句话原则:
1、JavaScript中无块级作用域
function Main(){
if(1==1){
var name = 'test';
}
console.log(name);
}
// 输出: test。在函数内查找。
2、JavaScript采用函数作用域
在JavaScript中每个函数作为一个作用域,在外部无法访问内部作用域中的变量。
function Main(){
var innerValue = 'test';
} Main(); console.log(innerValue);#作用域在函数内,函数外没定义,无法找到。 // 报错:Uncaught ReferenceError: innerValue is not defined
3、JavaScript的作用域链
由于JavaScript中的每个函数作为一个作用域,如果出现函数嵌套函数,则就会出现作用域链。
xo = 'xxoo';//全局变量,global function Func(){
var xo = "ooxx";//函数内的局部变量,exeternal
function inner(){
var xo = 'xxxx';//函数内的局部变量,local
console.log(xo);
}
inner();
}
Func();
如上述代码则出现三个作用域组成的作用域链,如果出现作用域链后,那么寻找变量时候就会出现顺序,对于上述实例:
当执行console.log(xo)时,其寻找顺序为根据作用域链从内到外的优先级寻找,如果内层没有就逐步向上找,直到没找到抛出异常。
类似Python中的LEGB原则,首先会在local(本地)查找=>然后会到external(外部)查找=>再会查找global(全局)查找=>最后到build-in(内建)查找。进行链式查找!
4、JavaScript的作用域链执行前已创建
JavaScript的作用域在被执行之前已经创建,日后再去执行时只需要按照作用域链去寻找即可。
由于JavaScript是先加载完,再调用。当所有命名空间加载完成后,最后去查找,所以作用域链在执行前就已经创建好了。
5、JavaScript声明提前
在JavaScript中如果不创建变量,直接去使用,则报错:
console.log(xxoo);
// 报错:Uncaught ReferenceError: xxoo is not defined
function Foo(){
console.log(xo);
var xo = 'xxoo';
} Foo();
// 输出:undefined
上述代码,不报错而是输出 undefined,其原因是:JavaScript的函数在被执行之前,会将其中的变量全部声明,而不赋值。所以,相当于上述实例中,函数在“预编译”时,已经执行了var xo;所以上述代码中输出的是undefined。
七、闭包
作用域搞清楚后,理解闭包就非常简单了。
var city = 'beijing'; function func(){
var city = "shanghai";
function inner(){
// var city = "langfang";
console.log(city);
}
return inner;
}
var ret = func();
ret(); #shanghai
JavaScript快速入门-ECMAScript函数的更多相关文章
- JavaScript快速入门-ECMAScript基础语法
一.JavaScript引入方式 1.行内式 <script> alert(123); </script> 2.外链式 <script src='custom.js'&g ...
- JavaScript快速入门-ECMAScript对象介绍
一.概念介绍 在 ECMAScript 中,所有对象并非同等创建的.一般来说,可以创建并使用的对象有三种:本地对象.内置对象和宿主对象. 要理解这三种对象,先要理解宿主环境. 1.宿主环境 一般宿主环 ...
- JavaScript快速入门-ECMAScript运算符
1.逻辑运算符 逻辑与:&&(and) 逻辑或:||(or) 逻辑非:!(not) 逻辑 AND 运算符(&&) 逻辑 AND 运算的运算数可以是任何类型的,不止是 B ...
- JavaScript快速入门-ECMAScript本地对象(Array)
Array对象 Array对象和python里面的list对象一样,是用来存储多个对象值的对象,且方法和属性基本上类似. 一.属性 lenght 二.方法 1.concat() 用于连接两个或多个 ...
- JavaScript快速入门-ECMAScript本地对象(RexExp)
一.概述 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 正则表达式是由一个字符序列形成的搜索模式. 当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容. 正则表达式 ...
- JavaScript快速入门-ECMAScript语句
JavaScript语句(if.for.for in.do...while.while.break.continue.switch) 一.if语句 if (condition) statement1 ...
- JavaScript快速入门-ECMAScript本地对象(String)
一.String对象 String对象和python中的字符串一样,也有很多方法,这些方法大概分为以下种类: 1.索引和查找 1.charAt() 返回指定位置的字符. 2.charCodeAt( ...
- JavaScript快速入门-ECMAScript本地对象(Date)
JavaScript中的Date 对象用于处理日期和时间. var myDate=new Date() #Date 对象会自动把当前日期和时间保存为其初始值. 一.Date对象的方法 方法 示例 n ...
- JavaScript快速入门-ECMAScript本地对象(Number)
Number 对象是原始数值的包装对象. 创建一个Number对象:var myNum=new Number(value); 注意: 1.参数 value 是要创建的 Number 对象的数值,或是要 ...
随机推荐
- MiUI开发者版刷入xposed框架--简洁方法
一,首先要确定手机是否解锁 可以去这里查看怎么解锁: http://www.miui.com/unlock/index.html 二,手机系统需要是开发者版,且在安全中心的授权管理打开了ROOT授权 ...
- python基础一数据类型之列表
摘要: python基础一中写到列表,那么这篇主要讲列表. 1,定义列表 2,列表.元祖.字符串都属于序列,都可以用用索引和切片. 3,列表的方法 1,定义列表 list1 = ['a','b',1, ...
- SQL Server 如何设置数据库的默认初始大小和自动增长大小
我们在SQL Server中新建数据库的时候,可以选择数据库文件及日志文件的初始大小.自动增长大小和最大大小,如下图所示: 可以通过设置更改数据库初始大小.自动增长大小和最大大小: 但是其实在SQL ...
- [原创]使MySQL注释语句在后台能够输出的方法
开启general log或slow log的时候,前端发出的sql语句中的注释都别屏蔽掉了. 本意加注释我们想通过注释来快速知道sql是由哪个业务模块发出的.这点对dba和研发很有帮助. 一种变通的 ...
- [转]Java学习---7大经典的排序算法总结实现
[原文]https://www.toutiao.com/i6591634652274885128/ 常见排序算法总结与实现 本文使用Java实现这几种排序. 以下是对排序算法总体的介绍. 冒泡排序 比 ...
- React阻止事件冒泡的正确打开方式
需求:点击导航list按钮出现侧弹框,点击空白处弹框消失 问题:绑定空白处的点击事件到document上,但是非空白处的点击也会触发这个点击事件,在react中如何阻止事件冒泡? 解决方法:e.sto ...
- Swift 实践篇之链式 UI 代码
https://blog.nswebfrog.com/2017/10/20/swift-practice-ui-chaining-code/
- 基于duxshop遍历无限级分销用户的纵向递归
/**获取基准数据 * @param $ids 父id 多个逗号分隔 * @return array */ public function saleBase($ids) { $data=$this-& ...
- 【转】Android7.0适配心得
本文出自:贾鹏辉的技术博客(http://www.devio.org) http://www.devio.org/2016/09/28/Android7.0%E9%80%82%E9%85%8D%E5% ...
- [转]VS 2012环境下使用MFC进行OpenGL编程
我就不黏贴复制了,直接给出原文链接:VS 2012环境下使用MFC进行OpenGL编程 其它好文链接: 1.OpenGL系列教程之十二:OpenGL Windows图形界面应用程序