JavaScript
来源:互联网 发布:在线大肚照自拍软件 编辑:程序博客网 时间:2024/04/29 19:25
一、javascript函数的声明大概有三种方法:
1、最常规的写法:我这里给个例子
- //1、最常见函数写法
- function general(){
- alert('hello javascript!');
- }
- //2、匿名函数的写法
- var anonymity = function(){
- alert('hello javascript!');
- }
- //声明一个构造函数
- 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,
闭包的一个是前面提到的实例读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
所以在使用过程中,要注意不要乱用闭包,否则会导致内存消耗太大。
就写到这里吧,自己的理解有错误的地方,欢迎大家指正哈。希望和大家共同进步!!
1 0
- Javascript
- JavaScript
- javascript
- javascript
- javascript
- javascript
- javascript
- JavaScript
- javascript
- JavaScript
- Javascript
- javascript
- javascript
- JavaScript
- javascript
- javascript
- JavaScript
- javascript
- JS中call和apply
- meanshift运动跟踪算法详解
- CTF-web练习
- 【转载】jdk、jre、jvm等名词解释
- nyist 740 “炫舞家“ST
- JavaScript
- //6.5 定义一个日期类 Date,该类对象存放一个日期,可以提供的操作有: //void GetDate(); //取日期值,格式如“2001 年 2 月 5 日” //void GetYear(
- 思考各种编程语言是如何适应运行环境(调用外设)的?
- View setSystemUiVisible 测试
- 随机数字的大小排列
- 并发编程
- 62. Unique Paths
- 第五周实践项目1————三角形雏形(4)
- 微软认知服务开发实践(1) - 牛津计划简介