x.test()调用为何会报错? y.test()却是没问题的?
var x=function(val){
console.info('the value is: ', val);
function len(val){
if (typeof val=='undefined'){
console.info('no source path specified')
}
console.info('nested len function called from ', val);
}
var test=function(){
console.info('test');
}
}
var y={
test:function(){
console.info('function defined in y');
}
}
x('haha');
x('jindezhen');
console.info(typeof x.len);
y.test();
// x.test();
11 回复
y像个字典,不像函数,不过里面却有函数 x就是个函数,我想让它变得像字典,可是
没办法通过函数名称访问到内部的test变量,这是为啥?
这个不是函数对象内部的一个变量么?肿么就不能访问?
如果把function当成class,按其他语言的理解,test应该也是成员变量啊,
#咋就不能访问呢?
JavaScript和其他典型的面向对象的语言是不同的,不能按照其他语言的思路来理解JavaScript代码。楼主可以查下JavaScript变量作用域的资料来了解一下。
就这个问题来说,函数内部定义的变量只能在该函数内部使用,如果想在外部访问到的话,可以用return把它返回出去,这样在外部执行函数的时候就能得到这个变量的值了。
代码修改如下:
var x=function(val){
console.info('the value is: ', val);
function len(val){
if (typeof val=='undefined'){
console.info('no source path specified')
}
console.info('nested len function called from ', val);
}
var test=function(){
console.info('test');
}
return test; //将内部变量传递出去
}
x('haha')(); //执行内部变量定义的函数
输出结果为: the value is: haha test
@wannianchuan 赶脚JS模拟OO很蛋疼。。
js中是用function来模拟class,看来不完全啊
class A{ var x; } A a a.x 可以访问的
但是 function A{ var x; } A a a,x是不能访问的。。。。
@xiuxu123 function定义类,内部变量不是其属性,只是定义域内的变量,无法从外部看到。 所以一个好的类,内部第一层必然是属性,第二层才是定义域变量:) 这样就可以从外部通过属性,直接使用类定义的函数:)