js 函数传参,带参数函数的调用方式,闭包

操作方法

  • 01

    /****************** 函数相关 ******************//********** 一:函数传参 **********//*编程语言大概都有 值类型与引用类型 的区别,JS也不例外。原始类型:undefined null number boolean 均为值类型。string比较特殊,因为它是不可改变的,String类定义的方法都不能改变字符串的内容。function object array 这三种为引用类型。*//*JavaScript 函数传递参数时,是值传递。ECMAScript 中,所有函数的参数都是按值来传递的。基本类型值的传递和基本类型变量复制一致(采用在栈内新建值),引用类型值的传递和引用类型变量的复制一致(栈内存放的是指针,指向堆中同一对象)。具体参考:http://99caipiao.com.cn*/functionsetName(obj){//obj拷贝了person的值(person是一个对象的引用地址),所以obj也指向了person所指向的对象。obj.name = "xiaoxiaozi";obj = {};//让obj 指向了另一个对象obj.name = "admin";}varperson = {};setName(person);alert(person.name);//xiaoxiaozi/********** 二:带参数函数的调用方式 **********//*在DOM不同版本中,函数调用方式不太一样。标准推荐的是addEventListener和attachEvent这两种方式有很多资料可查。但是有些已经不被推荐的函数调用仍旧有实际应用,相关资料发现的不多。这里主要讨论这些函数调用方式*/varg = "全局变量";functionshow(str) {alert("my site: " + str);}setTimeout("show(g);",100);//g是全局变量,函数正确执行functiont() {varurl = "www.xujiwei.cn";varnum = 2;//setTimeout("alert("+url+")", 3000); // 解析错误,www未定义//setTimeout("alert("+num+")", 3000); // 解析正确,注意与上句对比//setTimeout("show('url');", 2000); // url//setTimeout("show("+ url +");", 2000); // 解析错误,www未定义//setTimeout("show(url);", 2000); // 解析错误,url未定义//setTimeout('"show("+ url +");"', 2000); // 解析错误,url未定义//setTimeout("show('"+ url +"');", 2000); // 正确//setTimeout(function(){show(url);},1000); // 正确}t();/*结论:诸如onclick="xx();"等函数调用方式,在双引号内的内容直接解析为js语句执行。若调用的函数带有参数,注意对比以上各种写法,保证传递进去的参数为正确的。*//********** 三:闭包 **********//*闭包,几乎是每个学习JS的朋友都要讨论的问题,因此各种相关资料应有尽有。它的作用很大,但也有弊端,例如如果使用不当,容易引起内存泄漏等问题,因此有不少人提倡少用闭包。这里列出闭包的一种经典应用,一个有争议的应用。*/functiontest1() {//通过闭包,每次能传入不同的j值。for(varj = 0; j < 3; j++) {(function(j) {setTimeout(function() { alert(j) }, 3000);})(j);}}test1();/*这个是闭包的典型应用*/(functiontt() {for(vari = 1; i < 4; i++) {document.getElementById("b" + i).attachEvent("onclick",newFunction('alert("This is button' + i + '");'));http://99caipiao.com.cn//在IE中测试}})()//立即执行函数,一个文件是否只能有一个?把上边函数写成立即执行出问题,怎么回事?/*这个问题出现在论坛里,有很多争议有说是new Function动态生成个闭包结构的函数,所以能保存外部变量。有说是跟闭包无关,new Function,就是新定义了一个function,i的值也作为这个新的function的参数固化在其内部了。*/

(0)

相关推荐

  • C语言带参数宏定义【编程必备】

    C语言允许宏带有参数.在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数. #defineM(y)y*y+3*y/*宏定义*/ /* -- */ k=M(5);/*宏调用*/ 在宏调用时,用实 ...

  • 微信公众号怎么生成带参数的二维码?

    每位运营过微信公众平台的野生小编都知道,微信提供给开发者的文档是很高深的,最近为了弄个带参数的二维码,同样技术小白的小编也死了不少脑细胞了,然而我终于知道官方生成带参数的二维码的方法了. 1.注意事项 ...

  • VB6.0怎么调用带参数的DLL?

    vb6.0中可以创建DLL文件,也可以调用DLL文件,该怎么调用呢?下面我们就来看看详细的教程. 1.桌面上双击VB图标,打开Visual Basic. 2.打开的VB窗口中,选择文件----> ...

  • 微信公众号如何生成带参数的二维码?

    想知道你的公众号的每一个粉丝都是从哪里来的么? (微信公众号如何统计粉丝来源?) 只需要生成带参数的二维码就可以. 到底怎么生成带参数的二维码呢? 可以进行二次开发,或者授权第三方软件: 本文以鱼塘软 ...

  • 如何设置带参数的二维码

    教大家如何设置带参数的二维码,通过二维码识别粉丝,可以有效管理粉丝和推广人员. 操作方法 01 首先进入后台,在后台首页导航栏里面找到微信点击进入,如下图所示. 02 点击微信进入之后,在左侧导航栏下 ...

  • 微信生成带参数的二维码(手把手教,通俗易懂)

    别到网上乱找了,手把手教,敢不敢认真看? 每位运营过微信公众平台的野生小编都知道,微信提供给 开发者的文档是很高深的(技术小白表示看不懂),最近为了弄个带参数的二维码,同样技术小白的小编也死了不少脑细 ...

  • C语言函数的调用

    在一个程序的编写过程中,随着代码量的增加,如果把所有的语句都写到 main 函数中,一方面程序会显得的比较乱,另外一个方面,当同一个功能需要在不同地方执行时,我们就得再重复写一遍相同的语句.此时,如果 ...

  • matlab中一个函数怎么调用另外一个函数

    有时候我们在进行matlab编程的时候,想一个函数调用另外一个函数,怎么操作呢,下面来分享一下方法 方法一:主函数调用子函数 01 第一步在matlab中新建一个m文件函数 Untitled2(), ...

  • 如何利用MySQL数据库自带加密函数进行加密

    一般情况下,Java中有加密算法和解密算法.同样的道理,MySQL数据库自带了加密和解密函数,可以对数据进行加密和解密.加密函数是MySQL中用来对数据进行加密的函数,而解密函数是MySQL中用来对数 ...