当javascript中函数嵌套函数,那么在函数体里的子函数能使用到函数体外(所用函数之外)的全局变量吗

JavaScript012

当javascript中函数嵌套函数,那么在函数体里的子函数能使用到函数体外(所用函数之外)的全局变量吗,第1张

可以的。

所有函数在执行的时候,都会生成一个变量对象:

变量对象相当于一个栈,栈的第一个元素是函数当前的作用域的变量,下一个元素就是包含该函数的作用域(如果存在)。最后,到全局环境的时候,会在栈的结尾加上几个全局对象:window、Math、 Date 等 javascript原生对象。

当在函数调用变量时,将会在变量对象中循环搜索是否存在该变量,逐次搜索直到最后的全局对象。当搜索的层次越深,访问变量的效率越低。

话是这么说没错,不过你要明白js的作用域才行。js没有块作用域,只有函数作用域,就是说一个函数内部是一个作用域,如果它包含在其它函数内,那么它可以用外部的变量,但是外部不能用它的变量;简单的说嵌套的函数里,作用域也还是嵌套的。

name2未定义,这个很明显,就不说了;this.getInner很明显在this.innerFunc外部,当然不能利用里面的函数的变量,好吧,我感觉这个也很明显;你确定你访问的是外部函数的成员吗?

第一种方法。

1.首先准备好两个js文件。

2.然后写一个html文件,通过<script type='text/javascript' src=''></script>方法,将两个js引用到html文件中。

3.处于下方的js文件,就可以直接调用上方js文件中的内容了。比如我们在HTML中先载入了jquery,在第二个js可以使用dollar来对对象进行直接操作。

4.因为js本身是不能运行的,必须依托于html才能执行。<script type='text/javascript' src=''></script>的引用其实就相当于将几个js文件都写在HTML文件中了,所以可以直接调用。

第二种方法。

1.首先要在要引用另外一个js文件的js开头,写一个匿名函数。

2.在匿名函数里创建一个document.write()函数,将另外一个要引用的js写入。

3.但是除了opera浏览器,其他浏览器都不会马上建立DOM树,所以需要将动态载入js全部执行完成后,才能执行后续代码。可以将这一部分代码进行封装。

4.最后使用封装函数进行测试,这里使用的封装函数是LoadJS,我们写运行函数就OK。