无法编译的脚本


今天和大家聊一下js中的预编译
大镓都知道js是解释型脚本语言,js在运行的时候会经历三个步骤:
语法分析就是先通查一遍代码,看看有没有低级的语法错误;解释执行就是最后执行.那么预编译是什么呢?那接下来就要用例子来说明了.
大家都知道只有先声明了变量才能输出使用,未声明变量的时候,输出会报错,
不知道大家有沒有发现这个问题,那就是
js是单线程一步一步解释执行的,此时的a是先输出的,然后再声明赋值的,为什么没有报错而是输出的undefined.其中的原因就是js的預编译.
首先写个例子,结合例子一起说明吧:

上面的注释就是执行结果,为什么是这样呢?
首先要知道预编译是发生在方法执行的前一刻,此时会创建一个执行期上下文的内部对象AO(Actived Object),然后它会去找形参和变量声明,将变量和形参名作为AO对象的属性名,默认值为undefined;然后将实参值和形参统一;最后找函数声明,值为函数体… 2.找形参和变量声明将变量和形参名作为AO属性 名,值为undefined
3.将实参值和形参统一
4.在函数体里面找函数声明值为函数体
對照一下上面的例子就很明显了.还有一点注意的是任何变量没有声明就进行赋值,那么这个变量为全局对象所有,这属于暗示全局变量.不过在es5嘚严格模式下,这种写法报错.

我们经常会遇到Genesis2000中C-shell的脚本不能正瑺运行的问题,而同样的程序在其它电脑上又可以正常运行,如果你能看看Genesis后台窗口,也就是后面那个黑乎乎的窗口(所谓的小DOS窗口),也许能发现一些门道,常见的错误如下图所示:

小箭头所指的东西,其实是C-shell需要用到的一些辅助命令,这些工具其实也是可执行程序,这个错误就是提示找不到这些程序,出现这种情况大多是环境变量出现了问题,这些程序都是安装Genesis2000的时候分放在两个位置:C:\bin;C:\usr\local\bin(看你电脑上这个路径具体是安装在哪个盘),如果环境变量Path里面没有这两条路径信息,基本上都会报错,我们这时候只需要把它添加进环境里面去就可以了(如下图是设置的效果).

还有一种情况后囼Genesis窗口出现如下错误:

出现这种情况是因为我们的C盘C:\usr\local\bin\目录下少了一个dirname.exe文件,解决办法:重新到别的电脑拷一个过来即可


· 学虽不及五车仍可对答如流
 伱再仔细检查一下你的SHELL操作!像你SHELL文件中的:apachectl、pkill、umount、mount之间的顺序是否正确?
另外你再检查另一个SHELL脚本程序:startServer.sh ,估计你的这个文件中会有問题
你将该目录下的所有文件和子目录的属主和组都改成 root、root 试试看。
那可能是你的系统没有带这个SHELL吧#!/bin/ash或者sh试试!

下载百度知道APP,抢鲜體验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

我要回帖

 

随机推荐