JavaScript笔记之Function

一、函数定义

(1)使用function declaration

格式:function functionName(parameters) {

function body

}

注:此种方式声明的函数作用域是全局的,即在声明之前可以调用

(2)使用function expression

格式:var name = function (parameters) { function body };

注:与(1)不同,在声明之前不可以调用

(3)使用function constructor()

格式:var myFunction = new Function("a", "b", "return a * b");

注:不推荐使用,大多数情况下,在js中应该避免使用new关键字

二、Self-Invoking函数

使用(2)方式声明的函数可以被定义成“self-invoking”,self-invoking expression可以不必调用自动执行。

self-invoking函数条件:

(1)函数被”()“包括

(2)function expression is followed by ();

例:(function () {

var x = "Hello";              // I will invoke myself

})();

三、Function Object

在JS中,函数也是object,有自己的property和method,如arguments.length返回函数接收到的参数的个数;toString()方法返回函数的字符串形式。

四、参数

JS不会对接收到的参数做任何检查,包括参数个数、类型等等。

如果函数接收到的参数个数小于声明时的个数:未传递的参数被当做undefined

基本类型:值传递

object类型:传递的是引用

五、函数调用

使用call() 和 apply()两个函数来调用函数,必须有owner object作为第一个参数。

不同之处:

(1)使用call():参数一个个接收

function myFunction(a, b) { return a * b; }

myFunction.call(myObject, 10, 2);

(2)使用apply(): 使用数组接收

function myFunction(a, b) { return a * b; }

var myArr = [10, 2];

myFunction.call(myObject, myArr);

六、Closure

使用closure可以实现函数private变量。

Nested Function:定义在函数内部,可以访问其父函数内定义的局部变量。

closure实现例子:

var add = (function () {

var counter = 0;

return function () { return counter += 1; }

})();

add();    // 1

add();    // 2

add();    // 3

w3schools.com上对此解释:

A closure is a function having access to the parent scope, even after the parent function has closed.

JavaScript笔记之Function,布布扣,bubuko.com

时间: 2025-01-04 12:12:52

JavaScript笔记之Function的相关文章

密码学笔记——eval(function(p,a,c,k,e,d) 加密破解

密码学笔记--eval(function(p,a,c,k,e,d) 的加密破解 例题: 小明某天在看js的时候,突然看到了这么一段代码,发现怎么也理不出代码逻辑,你能帮帮他吗? 格式:SimCTF{} eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.rep

[Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法

js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+1}" 反射获取函数源代码的功能很强大,使用函数对象的toString方法有严重的局限性.toString方法的局限性ECMAScript标准对函数对象的toString方法的返回结果(即该字符串)并没有任何要求.这意味着不同的js引擎将产生不同的字符串,甚至产生的字符串与该函数并不相关. 如果函数

[Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码

函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式传递给eval函数以达到同样的功能.程序员面临一个选择:应该将代码表示为函数还是字符串?毫无疑问,应该将代码表示为函数.字符串表示代码不够灵活的一个重要原因是:它们不是闭包. 闭包回顾 看下面这个图 js的函数值包含了比调用它们时执行所需要的代码还要多的信息.而且js函数值还在内部存储它们可能会引用

JavaScript笔记——使用AJax

在使用过JQuery之后,再来看JavaScript的Ajax实现就会觉得很麻烦,不过,最近使用到了,就记录一下吧 在JavaScript中Ajax的实现可以分为四步: 第一步 得到XMLHttpRequest对象 得到XMLHttpRequest > 大多数浏览器都支持:var xmlHttp = new XMLHttpRequest(); > IE6.0:var xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); > IE

Javascript Object、Function对象

1.Object对象 原型对象 原型是对象的一个属性,也就是prototype属性,每个对象都有这个内部属性,而且他本身也是一个对象. ? 1 2 3 4 5 6 <script type="text/javascript">      Object.prototype.num= 10;      alert("添加原型对象属性:"+ Object.num);      Object.num = 20;      alert("添加对象属性:&

javascript中的function对象

function对象都是Function的实例: > Object.getOwnPropertyNames(Function) [ 'length', 'name', 'arguments', 'caller', 'prototype' ] 所以function对象也应该有这些方法或者是属性: <script type="text/javascript"> var myFunction = function func(name,age){ //请注意,直接调用这个函数

javascript笔记(二)

concat() 连接多个字符串,返回合并后的字符串. 1 var s1="a"; 2 var s2="b"; 3 var s3="c"; 4 5 console.log(s1.concat(s2,s3));//abc concat() 方法的结果等同于:result = s1 + s2 + ... + sN.如果有不是字符串的参数,则它们在连接之前将首先被转换为字符串. 数组中的concat():将参数添加为数组的元素,返回新的数组. 1 va

JavaScript笔记誊录

js:一种脚本语言.客户端语言 1.代码都写在<script></script>标签中 2.外部引用<script type="text/javascript" src=""></script> 变量命名规则 -> 严格区分大小写 ->与C#类似,多一个,可以使用$开头 大小写敏感,弱类型var -> 注释    // 与 /**/    (<!--  -->) -> 需要写JS,代

javascript中的function

function / 对象 所有的变量和方法名的:以字母,$ _开头其他随便,尽量使用英文字母命名,见名知意注意点:不允许使用关键字定义变量和方法的名称====函数即方法,方法即函数====百度:javascript关键字格式:function 函数名称(变量的定义规则)(形参列表){ 函数体 return ""; 不是一定要return,你有需要的时候才用return ,你打算把函数里你觉得要返回的数据,}; 注意二:把function当做一个数据类型,"不要当做一个方法&