(九)JavaScript之【JS函数(定义、参数、调用、【闭包】、call(),apply())】[较深,胆小勿进]
一】、定义:
/**
* 函数表达式
*
* Function() 构造函数
*
* 函数提升(Hoisting)
* JavaScript默认将当前作用域提升到前面去
* Hoisting应用在变量的声明和函数的声明
* 【使用表达式定义函数时无法提升】
*
* 自调用函数
*
* 函数是对象*/
//函数表达式储存在变量中
var x = function () { return 'message'; }; console.log(x()); /**
以上函数实际上是一个 匿名函数 (函数没有名称)。
函数存储在变量中,不需要函数名称,通常通过变量名来调用。
上述函数以分号结尾,因为它是一个执行语句。
*/
//不建议。在 JavaScript 中,很多时候,你需要避免使用 new 关键字。
var myFunction = new Function('a', 'b', 'return a*b');
console.log(myFunction(3, 4));
//函数提升
//在函数声明之前调用
myFunction(); function myFunction() {
console.log(233);
}
//自调用函数,是一个表达式,有括号把表达式括起来
(function () {
console.log('Hello'); //我将调用我自己
})();
//函数是对象,函数有属性和方法
console.log(typeof(function add() {})); //function //arguments.length 属性返回函数调用过程接收到的参数个数
//arguments是JavaScript的内置对象
function myFunction(a, b){
console.log(arguments.length);
} myFunction(1, 2); //
myFunction(); //
myFunction('test'); // //总结:
//函数定义作为对象的属性,称之为对象方法。
//函数如果用于创建新的对象,称之为对象的构造函数。
二】、参数
/**
* 函数参数
*
* arguments 对象
* arguments对象包含了函数调用的参数数组
* */ /**
* 如果函数在调用时缺少参数,参数会默认设置为: undefined
有时这是可以接受的,但是建议最好为参数设置一个默认值*/
function add(x, y){
if(y === undefined) {
y = 0;
}
//或者:
//y = y || 0;
//如果y已经定义 , y || 返回 y, 因为 y 是 true, 否则返回 0, 因为 undefined 为 false。
console.log( x + y);
} add(2);
console.log(Boolean(undefined)); //false
//查找最后一个参数的值
function findMax() {
var maxNum = 0; for(var i = 0;i < arguments.length;i++) {
if(arguments[i] > maxNum) {
maxNum = arguments[i];
}
}
console.log(maxNum);
}
findMax(4,5,6); //
function sumAll() {
var sum = 0; for(var i = 0;i < arguments.length;i++) {
sum += arguments[i];
}
console.log(sum);
}
sumAll(4,5,6); //
三】、调用
/**
* 函数的调用:
*
* 1.作为一个函数调用
*
* 2.作为对象的方法调用
*
* 3.构造函数new调用函数
*
* 4.call()、apply()调用函数
* call([thisObj[,arg1[, arg2[, [,.argN]]]]])
* call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 */ var myObject = {
myName: 'lqc',
myPets: ['HuaDou', 'ErBao'],
fullInformation: function () {
return this.myName + ' have ' + this.myPets[1];
}
}; console.log(myObject.fullInformation()); function multiply(a, b) {
return a*b;
} console.log(multiply.call(myObject, 5, 6));
console.log(multiply.apply(myObject, [5, 6]));
四】、闭包
闭包:
私有变量可以用到闭包
// 计数菌
var add = (function (){
var counter = 0; return function () {
return counter++;
}; })(); console.log(add());
console.log(add());
console.log(add());
//定义多个嵌套函数
function counter() {
var counter = 0; return {
count: function () {
return counter++;
},
reset: function () {
return counter = 0;
}
};
} var c1 = counter();
var c2 = counter(); console.log(c1.count());
console.log(c1.count());
console.log(c1.count()); console.log(c2.count());
console.log(c2.count());
console.log(c2.reset());
五】、call()方法和apply()方法
参考:http://www.cnblogs.com/lqcdsns/p/5349496.html
(九)JavaScript之【JS函数(定义、参数、调用、【闭包】、call(),apply())】[较深,胆小勿进]的更多相关文章
- js函数定义 参数只要写名称就可以了
js函数定义 参数只要写名称就可以了 以下为标准: function add(type) { } 不要写成下面这个样子 function add(var type) { } 哎 妹的 老何ja ...
- js函数定义参数个数和实际传入参数的对比
因为js是一种弱类型的编程语言,对数据类型的要求没有其他编程语言的要求严格,所以在定义函数的时候不需要像java和C#一样对其传入参数的类型进行定义.那么传入参数的个数有没有影响呢?今天小猪就做了个实 ...
- javascript、jQuery函数定义和调用方法
一.javascript 1.var aaa=function(){...} var 方式定义的函数,不能先调用函数,后声明,只能先声明函数,然后调用. 2.function aaa(){...} f ...
- js函数定义和调用
由于JavaScript的函数也是一个对象,上述定义的abs()函数实际上是一个函数对象,而函数名abs可以视为指向该函数的变量. var abs = function (x) { if (x > ...
- js加载事件和js函数定义
一 dom文档树加载完之后执行一个函数 在Dom加载完成后执行函数,下面这三个的作用是一样的,window.onload 是JavaScript的,window.onload是在dom文档树加载完和 ...
- js函数的参数
js函数的参数: js是弱类型的编程语言,调用函数时既不在乎函数的参数,也不在意参数的类型 即便你定义的函数值接受两个参数,在调用这个函数时也未必一定要是两个参数.可以传递一个.三个甚至不传递参数,而 ...
- js 函数定义的方式
js 函数定义的方式 一.总结 一句话总结: 最常见就下面三种 最常见:function func1([参数]){/*函数体*/} 将匿名函数赋值给变量:var func2=function([参数] ...
- js 函数定义三种方式
<p>Js 函数定义的三种方式:</p> <br> <p>方式一:function</p> <script type="te ...
- Linux Shell函数定义与调用
一.Shell函数定义格式 shell函数定义格式,各部分说明如下: [ function ]等中括号括起来部分----表示可选(即可有可无) your_function_name部分----为函数名 ...
- js 函数定义的2种方式
js 函数定义的2种方式 CreateTime--2018年3月29日18:36:14 Author:Marydon 方式一: /** * 函数式声明 */ function mode() { c ...
随机推荐
- [JavaScript]Prototype继承
JavaScript相对于其他的编程语言是比较简单的,只要吃透了Prototype和Closure(闭包),基本上就可以说精通JavaScript了. JavaScript里如何实现向Java语言的O ...
- Python入门8文件处理
文件处理文本模式name = input("请输入用户名:").strip()with open("a.txt","wt",encoding ...
- 关于web安全需要在编程时注意的
公司用绿盟科技的远程安全评估系统扫描了项目,发现一些安全隐患,记录下来,以规避以后编程或者发布时犯同样的错误. 1. 目标web应用表单存在口令猜测攻击 风险:登录密码易被暴力破解,暴力破解是一种常见 ...
- docker(5)常用命令
1.docker docker安装国内源 $ sudo yum-config-manager \ --add-repo \ https://mirrors.ustc.edu.cn/docker-ce/ ...
- pyhive -- thrift.transport.TTransport.TTransportException: TSocket read 0 bytes
Pyhive 远程连接hive出现问题: from pyhive import hive import pandas as pd #Create Hive connection conn = hive ...
- js学习笔记 -- 函数
js函数有类似javaMethod用法 Math.max.apply( Math.max.call( Array map,reduce,filter,sort , , , , , , , , ]; v ...
- Appium自动化中截图的问题
在用Appium做UI自动化过程中,大家会发现测试报告很重要,而在测试报告中截图很重要. 因为很多公司都是用Jenkins作为持续集成工具,所以要让执行自动化测试的人看明白自动化在跑什么,哪里失败了, ...
- AndroidAPI
1词典 百度翻译 http://api.fanyi.baidu.com/api/trans/product/index 百度翻译支持多种语言互相翻译,包含PHP, JS, Python, C, Jav ...
- C语言判别输入的东东
梗概:现在很多用C语言写出来的作业,都是用户输入后,电脑对应操作的.其实这样有没有漏洞呢? 这样的管理系统,相信大家也不陌生,我们这里不是谈它的功能和怎样实现..我们就谈谈最后一行.[输入序号].其实 ...
- python-常用模块整理
学习背景 最近需要进行文件夹数据的批量读取,里面会用到python里面的os模块.但是对os模块又不是很熟悉,里面的函数有哪些函数?有什么用?怎么用?英语不好的每次看官方文档也比较费力,所以就想着看看 ...