[教程]JScript中的变量引用规则(补充,函数用法说明)

原创 2002年06月08日 17:46:00

[教程]JScript中的变量引用规则(补充,函数用法说明)
by http://www.lostinet.com/,http://lostinet.d2g.com

第一篇:http://www.csdn.net/expert/topic/787/787738.xml

我高考语文才496分啊,,,惨。。现在要说些什么,都不知道。。。
还是用例子开始吧:不过例子和分析,现在写在一起了。

这个只是补充说明,看不看都没有关系。不会的还是看看好:)

2。1 -》函数被传递
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
var func=function(){alert("ok")};
function CallFunc(f)
{
 f();
}
CallFunc(func);
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}
一般的应用中,传递函数是很少见的。但是对于很多动态的应用,传递函数就很正常了。
这个例子,func是一个函数。CallFunc(func)时,把func传递给CallFunc中的f
所以在
function CallFunc(f)
{
 f();
}
中,f是一个函数。所以调用f()是可以的。实际上就是调用function(){alert("ok")};

2。2 -》函数作为方法
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
var obj={};//var obj=new Object();
obj.value=14;
var func=function(number){alert(this.value+number)};
obj.alert=func;
obj.alert(25);
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}

这个例子,说明了函数作为一个对象的方法,是怎样使用的。
this是一个特殊的变量,它是一个参数。
当执行obj.alert(25)时,
其实是执行function(number){alert(this.value+number)};
而这个过程中obj也传递过去了,化身为this。
这个过程大家都比较了解,所以也不多说了。
要执行对象的方法,只有两个途径:
一:obj.method(); 必须有一个“.”的存在。
二:func.apply(obj,args),func.call(obj,arg1,arg2...),这个需要JScript5.5的支持。

2。3 -》函数作为方法,2
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
var obj={};//var obj=new Object();
obj.value=14;
var func=function(number){alert(this.value+number)};
obj.alert=func;
var method=obj.alert
method(4);
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}

为什么显示NaN呢?
虽然method=obj.alert,但是传递的,却只是obj["alert"]本身,即func
所以在执行func中,没有隐含的对象传过去给this
this没有被赋值,在IE中默认是window,在其他变量空间就依赖有this的空间来判断

2。4 -》函数作为对象使用。
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
function aaa()
{
 alert(this);
}
function aaa.bbb()
{
 alert(this);
}
var func=function(){};
func.bbb=aaa;
func.bbb();
func.bbb.bbb();
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}
我没有精神了,你自己理解吧。。


2。5 -》函数作为对象使用2。
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
function func(){};
function func.a(){return "a"};
function func.b(){return "b"};
function func.c(){return "c"};
for(var i in func)alert(func[i]());
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}

2。6 -》caller
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
function Func()
{
 alert(Func.caller);
}
function CallFunc()
{
 alert(CallFunc.caller);
 Func();
}
CallFunc();
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}
因为CallFunc()是全局执行的,所以没有函数调用CallFunc,所以CallFunc.caller为null
而在Func,是由CallFunc调用的,所以第二次显示CallFunc

2。7 -》不依赖名字,在函数中取函数本身
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
function CallFunc()
{
 alert(CallFunc);
 var fs=function(fs){return fs.caller};
 fs=fs(fs);
 alert(fs);
}
CallFunc();
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}
第一次alert是做个示范。这个是直接引用CallFunc的。
var fs定义了一个很特殊的函数。
当执行fs=fs(fs)时,就取回fs的调用者CallFunc,所以fs引用了CallFunc了

2。8 -》arguments
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
function alertBatch()
{
 var args=alertBatch.arguments;
 var arr=[];
 for(var i=0;i<args.length;i++)
  arr[i]=args[i];
 alert(arr.join(""));
}
alertBatch(1,"a",2,"b",3,"c",4,"d",5,"e");
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}
alertBatch.arguments是调用该函数的参数的数组(不是Array)
根据这个,函数可以处理多个参数的情况。

2。9 -》Function.prototype.toString
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
function Function.prototype.toString()
{
 return "object Function";
}
function func()
{
}
alert(func);
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}

 

函数的其他方面就不多说了。JScript的参考书都有说明。

 

 


 

[教程]JScript中的变量引用规则(一)

[教程]JScript中的变量引用规则http://www.csdn.net/expert/topic/787/787738.xmlJScript中的变量引用规则。:)by http://lostin...
  • Lostinet
  • Lostinet
  • 2002年06月08日 10:10
  • 1111

Oracle补充日志及日志记录规则

Oracle补充日志及日志记录规则   转自:http://blog.itpub.net/23135684/viewspace-1122398/    这篇文章是在《构建最高可用Oracle数...
  • li19236
  • li19236
  • 2014年11月30日 11:48
  • 608

Python中的变量、引用和作用域

Python中的变量、引用、拷贝和作用域可变对象 & 不可变对象在python中,对象分为两种:可变对象和不可变对象。不可变对象包括int,float,long,str,tuple等,可变对象包括li...
  • github_15549139
  • github_15549139
  • 2015年07月23日 09:32
  • 1801

Velocity模板语言(VM)介绍

 Velocity是什么? Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码...
  • zhaosg198312
  • zhaosg198312
  • 2009年10月16日 14:06
  • 2336

PHP 引用“&“之变量引用,函数引用,对象引用

php引用的含义 对于这个话题?有人肯定会问:什么是php引用? 所谓的php引用,引用官方的一句话就是: 在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针...
  • tashanhongye
  • tashanhongye
  • 2015年12月14日 13:17
  • 1512

android studio显示函数的用法

选中某个函数,然后按Ctrl+Q 就可以了。  不像以前Eclipse那样鼠标悬浮。 PS: (我看好多文章转载那个用F2的,都是错误的,还嘎嘎。。晕死)...
  • yagamil
  • yagamil
  • 2014年10月18日 15:40
  • 1686

python关于调用函数外的变量

class Solution(object): def foo(self, s): def bar(a): s += a pri...
  • p323029
  • p323029
  • 2017年01月09日 06:59
  • 1849

JScript---数据类型转换

//Number转换规则 0:false Number(""); //0 Number(" "); //0 Number(false); //0 Number(nu...
  • damys
  • damys
  • 2014年09月04日 17:02
  • 793

变量的存储类别、内外部函数【static\extern】

变量的存储类别 存储方法分为静态存储和动态存储两大类。具体包含4种:自动的、静态的、寄存器的、外部的。 注意:全局变量+静态局部变量存在静态存储区! 一、自动变量auto 动态存储区,动态存储方式【...
  • Dr_Unknown
  • Dr_Unknown
  • 2016年04月23日 21:10
  • 618

使用JScript函数

使用JScript函数 虽然JScript是一种面向对象语言,但它也包含少部分函数,通常有三个函数是很有用的,你可以使用parseInt()和parseFloat()函数来将一个字符串转变为整数...
  • aasmfox
  • aasmfox
  • 2013年12月18日 21:59
  • 609
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[教程]JScript中的变量引用规则(补充,函数用法说明)
举报原因:
原因补充:

(最多只允许输入30个字)