问题1:
var ti= function(){
.....}();
function最后的();时什么意思??问题2:
var ti=function(){..}和 function td(){。。} ;var ti= new td();有什么区别吗,
问题3:
var ti=function(){
this.i="0";
}
alert(ti.i);报错了,为啥啊!
var ti= function(){
.....}();
function最后的();时什么意思??问题2:
var ti=function(){..}和 function td(){。。} ;var ti= new td();有什么区别吗,
问题3:
var ti=function(){
this.i="0";
}
alert(ti.i);报错了,为啥啊!
相当于 function x(){}; ti=x(); 定义函数并立即调用
------------
与var ti=function(){}关系不大, 这样写是定义了函数句柄。
如果是 var ti= function(){}();的话, 同var ti= td();
-------------
此时this并不是指类的实例
var ti= new function(){
this.i="0";
}()
alert(ti.i);
var ti= function(){
return "text";
}();
等同于
function fn(){
return "text";
}vat ti = fn();问题2:
没看懂什么意思问题3:
var ti=function(){
this.i="0";
}
你只是声明了一个函数,并有没执行,肯定会报错啊,你new一下函数
var ti = new function(){
this.i="0";
}
alert(ti.i);就正常了
1:json var j={i:0,...}
2:构造函数 function ds(){...},var j= new ds();
可是这个源码里老是这样定义对象 var j= function(){}();我模仿这个写法自己写个小的测试却老是报错,最后我想后面的();可能就是要函数执行,
就改成 var j= function(){},可还是报错,现在明白了要写成var j=new function(){..},等于时第二种方法,只是函数匿名简写了。理解应该没错了把?
很感谢楼主同志帮忙,不过还有两个问题无耻的问下:
1、
j=function(){
.....
return{
js:function(){
.....
}这种写法是不是要函数返回一个对象啊,在函数j外面能通过j.js调用吗?这种写法用什么讲究吗?2、var j=functon(){..},此时的j是什么呢,能通过 var l= new j()调用吗?不太理解啊
.....
return{
js:function(){
.....
}()调用j.js()2,j就是函数function(){..}, 能通过var l= new j();调用
var ti= function(){
.....}();
function最后的();时什么意思?? //直接执行该函数 如果函数有返回值 变量ti将得到该返回值
问题2:
var ti=function(){..}和 function td(){。。} ;var ti= new td();有什么区别吗,
/*****start****/
var ti=function(){..}
function td(){。。} //这是定义一个函数的两种写法var ti = new td(); //这是定义对象的方式 因为function也是对象 所以可以这么来写
/*****start****/问题3:
var ti=function(){
this.i="0";
}
alert(ti.i);报错了,为啥啊!你这么写是没有问题的 报错是因为你的大括号的字体不是英文字体导致的
你要想获得i 要new ti().i 才可以得到
.....
return{
js:function(){
.....
}
}()我们给函数加个名字,效果是一样的var j=function fn(){
.....
return{
js:function(){
.....
}
}()我们一步一步看,外面的()其实就是执行了fn函数,也就是return 了
{
js:function(){
.....
}
因此等价于var j = {
js:function(){
.....
}而他为什么要这样写呢,是因为看例子
var j=function fn(){
var str = "abc";
return{
js:function(){
alert(str)
}
}()str作为fn函数的私有变量在fn函数中保存起来,其实他等价于var str = "abc";
var j = {js:function(){alert(str)}};但为什么要用闭包写呢?
因为全局变量是魔鬼,str是一个比较常用的命名如果我在代码里面写了var str = "abc";
var j = {js:function(){alert(str)}};但其他人不知道我已经命名了str,在某个地方写了
str = "111";
那我后面调用j.js()弹出的并不是我需要的"abc",而是别人无意中给我赋值的"111";
但我们将str作为私有变量保存到fn()函数中,别人在外面是无法访问与修改的,就杜绝了意外的发生。闭包很大的作用就在于此
<script>
var j= funtion(){
return {
jj:function(){
alert(1);
};
}
}();//();是出错后加上去的,不过结果一样,
j.jj();
</script>
结果时报错:
missing ; before statement
[在此错误处中断] var j= funtion(){ //firedebug出错信息;
这是???
是functionreturn {
jj:function(){
alert(1);
}; //这里多了个;
}
解释的很详细,加分结贴了,随便最后在问下能说下你js是怎么学的吗。我现在自学js就是在网上看文档和源代码,老是出现没见过的函数和用法,学的一点不系统,乱得很,呵呵,介绍下学习心得吧!好的话我帮你推广啊!
#2.多了个;,对象属性值分隔符是逗号,你加个;是语法错误
return {
jj:function(){
alert(1);
};//分号不能在这里加,去掉,或者换成个逗号在firefox下都没问题,ie就有问题
}