最近回顾了一下javascript的相关知识,借鉴很多资料,加上自己的理解。把学习心得整理下:
一、javascript函数的声明大概有三种方法:
1、最常规的写法:我这里给个例子
//1、最常见函数写法
function general(){
alert('hello javascript!');
}
2、匿名函数的写法:
//2、匿名函数的写法
var anonymity = function(){
alert('hello javascript!');
}
3、构造函数的写法:
//声明一个构造函数
function cf(name,value)
{
this.name = name;
this.value = value;
}
var msg = new cf("zyujie","java");
alert(msg.name);
4、关于第2种写法,匿名函数的写法,我们又有三种写法:这里同样以举例说明
//立即执行的匿名函数,三种写法
(function(){alert(1);})();
void function(){alert(2)}();
!function(){return true;}();
//首先说说第一种:(function(){alert(1);})();
var anonymity = function(){
alert('hello javascript!');
}
anonymity(); //这样就调用了
//演变调用方法==(anonymity)();==把anonymity替换成函数==(function(){alert('hello javascript!');});==就类似于第一种的写法了!
//第二种:void function(){alert(2)}();
//这种就是无返回值的调用。
//第三种:!function(){return true;}();
//这种前面加了一个运算符“!”,就是这个返回值会取非,我们这样写:
var flag = !function(){return true;}();
alert(flag); //结果是false
二、下面回顾一下闭包
javascript的变量有两种作用域:全局和局部。所有函数的内部都能读取到全局变量,而局部变量则只供函数内部使用。
怎么样从外部读取函数内部声明的变量,我们就通过了闭包去解决了这个问题:
一个简单的闭包例子:
//闭包的小例子,b嵌套在a,a则返回b,这样就我们就可以在外面得到函数内部的变量值了
function a() {
var i = 0;
function b() { alert(++i); }
return b;
}
//调用方法,把声明一个变量c,去作为a()函数的引用,c引用了函数a()后,再调返回方法c()
var c = a();
c();
//我们也可以这样写
a()(); //调用函数a(),和返回方法a()();
alert(c.i); //这样得到的结果是undefined,因为我们只能通过返回的方法去得到函数的内部变量,这样是不行的。
下面有一个经常都会用到的闭包的写法:
function personG(){
var name = "default";//变量作用域为函数内部,外部无法访问
return {
getName : function(){
return name;
},
setName : function(newName){
name = newName;
}
}
}
alert(personG().getName()); //返回default
//但是我个人觉得,我们用匿名函数的写法去写最好:
var personA = function(){
var name = "default";//变量作用域为函数内部,外部无法访问
return {
getName : function(){
return name;
},
setName : function(newName){
name = newName;
}
}
}();
alert(personA.getName());
personG和personA的区别:因为匿名函数是先定义后调用,而常规函数是可以先调用的。
personG().setName("zyujie");
alert(personG().getName()); //返回default
personA.setName("zyujie");
alert(personA.getName()); //返回zyujie
//下面写一个时间暂停10秒钟,调用getName的方法,
setTimeout(function(){alert(personA.getName());},10000); //结果还是zyujie,
闭包的一个是前面提到的实例读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
所以在使用过程中,要注意不要乱用闭包,否则会导致内存消耗太大。
就写到这里吧,自己的理解有错误的地方,欢迎大家指正哈。希望和大家共同进步!!
分享到:
相关推荐
在讨论JavaScript编程语言时,匿名函数和闭包是两个重要的概念,它们在函数式编程和模块化代码设计中扮演着核心角色。匿名函数是没有具体名称的函数,它们可以是独立的,也可以是表达式的一部分,通常用于定义临时...
标题中提到的“JS第16章 匿名函数和闭包”涵盖了JavaScript编程语言中的两个重要概念:匿名函数和闭包。这两个概念在JavaScript编程中非常重要,对于理解JavaScript的作用域、内存管理和模块化开发有着关键作用。 ...
**匿名函数**和**闭包**都是JavaScript中非常强大的特性。通过灵活运用这些概念,可以编写出更加高效和可维护的代码。然而,需要注意的是,由于闭包会导致函数的作用域被持续保留,因此过度使用闭包可能会导致内存...
总的来说,JavaScript中的匿名函数和闭包是强大的工具,它们可以帮助我们创建私有变量、实现模块化和数据封装,以及在异步编程中起到重要作用。理解并熟练运用这些概念对于任何JavaScript开发者来说都是至关重要的。
在JavaScript中,匿名函数、函数直接量和闭包是三种非常重要的概念,它们在编程实践中有着广泛的应用。让我们逐一深入探讨这些概念。 1. **匿名函数**: 匿名函数是指没有名字的函数,通常作为表达式的一部分存在...
更复杂的是,可以使用`new Function`构造函数创建函数,或者定义匿名函数,如`(function(){ //TODO here})()`,这常用于模块化隔离。内嵌函数(内部函数)允许访问外部函数的变量,这是闭包的基础。 当我们谈论函数...
JavaScript中的匿名函数和闭包是两个非常重要的概念,它们在函数式编程和模块化开发中起着关键作用。 首先,让我们来理解匿名函数。匿名函数,顾名思义,是没有名称的函数。在JavaScript中,我们可以直接定义一个不...
本文将对 JavaScript 匿名函数的定义、创建、调用方式、闭包的概念等进行详细的介绍。 一、函数的定义 在 JavaScript 中,函数可以定义的方式有多种。第一种方式是使用 function 关键字,例如: ``` function ...
JavaScript中的闭包、匿名函数和作用域链是编程中至关重要的概念,它们是理解JavaScript运行机制的关键。在本文中,我们将深入探讨这三个概念,并通过实际示例来展示它们的运用。 首先,我们来讨论“闭包”。闭包是...
本文主要通过一些简单的小例子,简述匿名函数和闭包的常见用法,仅供学习分享使用,如有不足之处,还请指正。 普通函数 普通函数由fucntion关键字,函数名,() 和一对{} 组成,如下所示: function box(){ return...
匿名函数是函数表达式的一种,没有名称,常用于一次性、临时性的函数需求。需要注意的是,函数表达式不会被提升,必须等待整个表达式解析完毕后才能使用。 接下来,我们讨论递归。递归是指函数在执行过程中调用自身...
总的来说,JavaScript的匿名函数和闭包是实现模块化、封装和高效代码的关键工具。它们可以帮助开发者创建更加健壮和易于管理的代码,同时减少全局变量的使用,提升代码的执行效率和安全性。理解并熟练运用这些概念...
在JavaScript中,任何函数都可以形成闭包,包括匿名函数。例如: ```javascript function outer() { var counter = 0; return function() { counter++; console.log(counter); }; } var increment = outer();...
在讲解闭包之前,需要先了解匿名函数。匿名函数是指没有具体名字的函数。它可以直接被定义并执行,或者赋值给一个变量。在JavaScript中,匿名函数可以用于事件处理器、定时器等多种场合。 例如,使用匿名函数自我...
### JavaScript中的匿名函数、函数直接量与闭包 #### 匿名函数与函数直接量 在JavaScript编程语言中,函数是一等公民,这意味着函数可以作为参数传递,也可以被其他函数返回。这种特性使得函数可以非常灵活地应用...
以下是对给定文件中提及的JavaScript函数关键知识点的详尽解析。 #### 如何定义和使用函数 定义函数的基本结构包括函数名、参数列表和函数体。例如: ```javascript function sum(a, b) { var c = a + b; ...
如果省略了函数名,就创建了一个匿名函数,例如用在回调或立即调用的函数表达式(IIFE)。 二、函数参数 JavaScript函数可以接受任意数量的参数,即使在声明时未指定。例如: ```javascript function greet(name) {...