JavaScript 定义function的三种方式小结
(1)声明一个表达式变量,并定义该变量的表达式。如:
代码如下:
var func = function()
{
/*body code*/
}
(2) 定义一个function表达式,并指定该表达式的标识。如:
代码如下:
function func()
{
//body code
}
(3) 使用JavaScript内置Function对象构造。如:
代码如下:
var func = new Function("/*parameters*/","/*body code*/");
声明变量定义与使用function表达式标识定义是有区别的。我们知道,function在发生传递时采用的是引用传递类型,使用变量定义是保存了表达式的地址引用,而使用标志定义保存了表达式的地址。因此当我们改变或重新定义变量时,并不会导致原来的表达式改变;而当改变标识时,其对应的表达式也随之改变。如:
代码如下:
//声明一个变量,并定义该变量的表达式引用
var test = function()
{
alert("reference test");
}
//定义一个表达式,保存其地址信息于test1中
function test1()
{
alert("reference test1");
}
//将test所引用的表达式传递给reference
var reference = test;
//将test1表达式的地址传递给reference1
var reference1 = test1;
//改变变量test的引用
test = function()
{
alert("new test");
}
//重新定义test1地址内的数据
function test1()
{
alert("new test1");
}
alert(reference);//其所引用的表达式不改变
alert(reference1);//由于reference1是test1地址的引用,当test1地址表示的内容改变时,reference1的内容也随之改变
相关推荐
-
javascript两种function的定义介绍及区别说明
一般情况下两者的调用结果是一样的,但是还是有区别的. 第一种方式: 复制代码 代码如下: function a(){ alert('old'); } var b=a; function a(){ b(); alert('new'); } a();//浏览器就会出现内存溢出的情况 第二种方式: 复制代码 代码如下: function a(){ alert('old'); } var b=a; var a=function(){ b(); alert('new'); } a();//浏览器就会按顺序
-
Javascript 使用function定义构造函数
Javascript中创建对象的语法是在new运算符的后面跟着一个函数的调用.如 复制代码 代码如下: var obj = new Object(); var date = new Date(); 运算符new首先创建一个新的没有任何属性的对象,然后调用该函数,把新的对象作为this关键字的值传递. 复制代码 代码如下: var date = new Date()的伪代码的实现就是 var obj = {}; var date = Date.call(obj); 构造函数的作用就是初始化一个新创
-
js function定义函数使用心得
1.最基本的作为一个本本分分的函数声明使用. 复制代码 代码如下: function func(){} 或 var func=function(){}; 2.作为一个类构造器使用: 复制代码 代码如下: function class(){} class.prototype={}; var item=new class(); 3.作为闭包使用: 复制代码 代码如下: (function(){ //独立作用域 })(); 4.可以作为选择器使用: 复制代码 代码如下: var addEvent=ne
-
JavaScript 定义function的三种方式小结
(1)声明一个表达式变量,并定义该变量的表达式.如: 复制代码 代码如下: var func = function() { /*body code*/ } (2) 定义一个function表达式,并指定该表达式的标识.如: 复制代码 代码如下: function func() { //body code } (3) 使用JavaScript内置Function对象构造.如: 复制代码 代码如下: var func = new Function("/*parameters*/",&quo
-
javascript函数命名的三种方式及区别介绍
javascript函数命名的三种方式及区别介绍 第一 复制代码 代码如下: function fn(val1,val2) { alert(val1+val2); } fn(1,2); 第二 复制代码 代码如下: var fn=function() { alert(val1+val2); } fn(1,2); 第三 复制代码 代码如下: var fn=new Function("alert(val1+val2)"); fn(1,2); 上面三种方式逻辑上是等价的,但是还是有点小区别:区
-
JavaScript定义函数的三种实现方法
JavaScript定义函数的三种实现方法 [1]正常方法 function print(msg){ document.write(msg); } 对函数进行调用的几种方式: 函数名(传递给函数的参数1,传递给函数的参数2,-.) 变量 = 函数名(传递给函数的参数1,传递给函数的参数2,-.) 对于有返回值的函数调用,也可以在程序中直接使用返回的结果,例如:alert("sum=" + square(2,3)); 不指定任何函数值的函数,返回undefined. [2]构造函数方法
-
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
如下所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Co
-
关于C++中定义比较函数的三种方法小结
C++编程优与Pascal的原因之一是C++中存在STL(标准模板库).STL存在很多有用的方法. C++模板库中的许多方法都需要相关参数有序,例如Sort().显然,如果你想对一个集合进行排序,你必须要知道集合中的对象,那个在前那个在后.因此,学会如何定义比较方法是非常重要的. C++模板库的许多容器需要相关类型有序,例如set<T> 和priority_queue<T>. 这篇文章旨在告诉大家如何为一个类定义一个排序方法,以便在STL容器或者方法中使用. 作为一个C++程序员,
-
MySQL删除表的三种方式(小结)
drop table drop 是直接删除表信息,速度最快,但是无法找回数据 例如删除 user 表: drop table user; truncate (table) truncate 是删除表数据,不删除表的结构,速度排第二,但不能与where一起使用 例如删除 user 表: truncate table user; delete from delete 是删除表中的数据,不删除表结构,速度最慢,但可以与where连用,可以删除指定的行 例如删除user表的所有数据 delete fro
-
apache虚拟主机配置的三种方式(小结)
目录 一.基于IP 二.基于主机名 三.基于端口 记事本打开httpd.conf文件 ,该文件在apache的目录下,如: D:\AppServ\Apache2.2\conf,修改如下两处: LoadModule vhost_alias_module modules/mod_vhost_alias.so //去掉前面的#,意思是启用apache的虚拟主机功能,第203行 Include conf/extra/httpd-vhosts.conf //去掉#的意思是从httpd-vhosts.con
-
Maven打jar包的三种方式(小结)
不包含依赖jar包 该方法打包的jar,不包含依赖的jar包,也没有指定入口类. <build> <plugins> <plugin> <!-- 指定项目编译时的java版本和编码方式 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.
-
MySQL复制表的三种方式(小结)
复制表结构及其数据 下面这个语句会拷贝数据到新表中. 注意:这个语句其实只是把select语句的结果建一个表,所以新表不会有主键,索引. create table table_name_new as (select * from table_name_old); 只复制表结构 create table table_name_new as select * from table_name_old where 1=2; 或者 create table table_name_new like tabl
-
mybatis-plus update更新操作的三种方式(小结)
目录 1.@ 根据id更新 2.@ 条件构造器作为参数进行更新 3.@ lambda构造器 mybatisplus update语句为null时没有拼接上去 1.@ 根据id更新 User user = new User(); user.setUserId(1); user.setAge(29); userMapper.updateById(user); 2.@ 条件构造器作为参数进行更新 //把名字为rhb的用户年龄更新为18,其他属性不变 UpdateWrapper<User> updat
随机推荐
- Vuex和前端缓存的整合策略详解
- ocp开闭原则_动力节点Java学院整理
- 多种方法实现JS动态添加事件
- PHP面向对象之旅:深入理解static变量与方法
- 详解Docker如何启动一个Centos镜像
- Javascript图像处理—图像形态学(膨胀与腐蚀)
- javascript的indexOf忽略大小写的方法
- iphone手机桌面滑动效果使用css3实现
- Android项目实战(二十八):使用Zxing实现二维码及优化实例
- 分享40条Android开发的优化建议
- 路由器基本原理和结构体系
- Spring Boot 2.0.0 终于正式发布-重大修订版本
- 详解【python】str与json类型转换
- C#实现时间戳的简单方法
- python 格式化输出百分号的方法
- Python中的字符串切片(截取字符串)的详解
- 使用vue实现各类弹出框组件
- Python中将dataframe转换为字典的实例
- ES7之Async/await的使用详解
- Python中浅拷贝copy与深拷贝deepcopy的简单理解