(function(){
var x1=0;
var b1=0; point=function(x,y)
{
this.x=x||x1;
this.y=y||b1;
}
})();这是啥意思?这样定义有什么用?和直接定义这么一个函数有什么区别?初学者,求稍详细的解释
解决方案 »
- 从数据库取出两组一样经纬度数据,然后显示在百度地图上,有什么办法可以区分这两个点
- ext结合Struts2返回json数据,无法在页面显示?
- 菜鸟请教一个网页编程问题,应该是关于Javascript的
- 有关鼠标坐标的问题
- 求一段可以在Chorme中读写Cookie的代码
- 如何实现div内自动滚动?
- javascipt如何控制光标范围问题?
- 求正则表达式--------判断用户名是否合法(可以是字母、数字、下划线、中文)
- radio和select的问题(高手请进,在线等呆)
- 将后台的数据转为json传到前台js表格无法显示,但josn里面有值
- 折腾了一段时间终于把贪吃蛇写出来了,不过还有很多BUG要修复
- onclick事件没有反应 是不是<script></script>中的方法没有调用 我是新手 好多不明白
http://www.cnblogs.com/rainman/archive/2009/05/04/1448899.html
Javascript 闭包是通过function实现的,所以它具有函数的基本特征,在闭包里声明的变量,闭包外的环境无法访问,除非它提供对外接口
<!--
function dwn(s)
{
document.write(s + "<br/>");
}
//我们说匿名函数调用产生一个"瞬时"的闭包
//因此当调用结束后,私有变量无法访问,并且如果没有外部引用存在
//内部对象就会被销毁
//而如果返回了函数,或者被全局引用,则"闭包"被保留了下来
//闭包中的内容被"有选择"地开放出来
(function(){
//封闭的私有域
var innerX = 10, innerY = 20; //开放的公共域
outerObj = {x : innerX, y : innerY} ;
})();try{
dwn(innerX); //内部数据无法访问
}
catch(ex){
dwn("内部数据无法访问");
}
dwn(outerObj.x); //通过外部接口访问
-->
</script>
var x1=0;
var b1=0; point=function(x,y)
{
this.x=x||x1;
this.y=y||b1;
}
})();
我来解释一下,我看楼上的都童鞋都不是很贴近主题,
1. 首先说一下最外层的小括号,和后面跟着的小括号的意思:就是执行里面这个自定义的匿名函数,例如
(function(n){
alert(n)
})(1)
这个例子放在html里面的话就会直接弹出alert(1)2. 这里说一下 point=function(x,y)
{
this.x=x||x1;
this.y=y||b1;
} 这个代表的意思,
(1) 首先 point 前面没有加var 表示point是全局变量,
(2) 指定定义函数 和赋值定义函数是有区别的,例如
function point(x,y){...} 这个是有区别的,js会先定义变量,在计算,就是说在一个作用域内(通常是一个函数内)js会先把所有需要定义的变量定义,然后在顺序执行运算,也就是说在一个js函数里面,无论你的定义变量的代码放在哪里,都没有影响.3. 这里要说的就是楼上也由提到的闭包,闭包是一个博大精深的js理念,这里我不多说了,楼主想研究闭包可以自己google,这里我就说一下楼主贴出来的代码,
在这段js里面point函数是没有全力操作x1和b1的,相对point来说 这两个变量和全局变量没区别,但是,注意,只是相对于point来说的,他们的访问权限只是限制于外围的这个匿名的函数,当然包括point,这个匿名函数外部是没有权限访问的,着就巧妙的实现了一种变量作用域权限的控制,当我们想实现全局变量的效果,但是又不想定义全局变量时,(全局变量当然是尽量慎用了,不安全),闭包(也就是类似于上面这种用法,只是类似)就是很好的一种实现.最后解释一下这个代码的意思:将point全部变量赋值,变成一个函数,这个函数的作用是如果调用point时没有传进来参数,就用x1,和b1来初始化这个匿名函数的成员变量x和y,解释一下,在一个函数内用this.xxx就是定义了一个相对于这个函数的成员变量,
纯手打.
var x1=0;
var b1=0; point=function(x,y)
{
this.x=x||x1;
this.y=y||b1;
}
})();
我来解释一下,我看楼上的都童鞋都不是很贴近主题,
1. 首先说一下最外层的小括号,和后面跟着的小括号的意思:就是执行里面这个自定义的匿名函数,例如
(function(n){
alert(n)
})(1)
这个例子放在html里面的话就会直接弹出alert(1)2. 这里说一下 point=function(x,y)
{
this.x=x||x1;
this.y=y||b1;
} 这个代表的意思,
(1) 首先 point 前面没有加var 表示point是全局变量,
(2) 指定定义函数 和赋值定义函数是有区别的,例如
function point(x,y){...} 这个是有区别的,js会先定义变量,在计算,就是说在一个作用域内(通常是一个函数内)js会先把所有需要定义的变量定义,然后在顺序执行运算,也就是说在一个js函数里面,无论你的定义变量的代码放在哪里,都没有影响.3. 这里要说的就是楼上也由提到的闭包,闭包是一个博大精深的js理念,这里我不多说了,楼主想研究闭包可以自己google,这里我就说一下楼主贴出来的代码,
在这段js里面相对point来说 这两个变量和全局变量没区别,但是,注意,只是相对于point来说的,他们的访问权限只是限制于外围的这个匿名的函数,当然包括point,这个匿名函数外部是没有权限访问的,这就巧妙的实现了一种变量作用域权限的控制,当我们想实现全局变量的效果,但是又不想定义全局变量时,(全局变量当然是尽量慎用了,不安全),闭包(也就是类似于上面这种用法,只是类似)就是很好的一种实现.最后解释一下这个代码的意思:将point全部变量赋值,变成一个函数,这个函数的作用是如果调用point时没有传进来参数,就用x1,和b1来初始化这个匿名函数的成员变量x和y,解释一下,在一个函数内用this.xxx就是定义了一个相对于这个函数的成员变量,这里x1,和b1 外部是没有权限修改, 就实现了默认初始化参数的效果,
并且这段代码是自动执行了 原因在第一点里 我已经说明了 不明白也可在回复
上面是刚才没打完 点错了.sorry
纯手打.
var x1=0;
var b1=0; point=function(x,y)
{
this.x=x||x1;
this.y=y||b1;
}
})();
在内部调用时候 比如 var abc=new point() 初始化 abc.x=0,abc.y=0
再如
var def=new point(2,3) 则 def.x=2 def.y=3需要注意的是 point 再跳出 })(); 后 无效