js解析机制与闭包分析?

js解析机制与闭包分析?,第1张

随着互联网的不断发展,程序员在学习JavaScript编程开发上也有了更多的了解,今天我们就简单分析一下关于JavaScript编程解析机制以及闭包的一些常见问题。

js解析机制:

js代码解析之前会创建一个如下的词法环境对象(仓库):LexicalEnvironment{}

在扫描js代码时会把:

1、用声明的方式创建的函数的名字

2、用var定义的变量的名字存到这个词法环境中

3、同名的时候:函数声明会覆盖变量,下面的函数声明会覆盖上面的同名函数

4、函数的值为:对函数的一个引用变量的值为undefined

5、如果用函数表达式的方式创建一个函数:

varfn=function(){}这样词法环境中存的是一个变量名fn,并赋值为undefined

在调用函数的时候如果在函数上面调用就会出现和变量一样的情况报错undefined

这也是以两种不同方式创建函数的区别

闭包:

定义:(有多种定义)

1、(比较通俗的定义):函数嵌套函数,内部函数可以引用外部函数的参数和变量,这些参数和变量不会被垃圾回收机制所回收

2、在计算机科学中,闭包是词法闭包的简称,是引用了自由变量的函数,这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外(意思就是不会被销毁)。

3、闭包是由函数和其相关的引用环境组合而成的实体。(潜台词就是这个函数将和引用环境同时存在,必须有引用)

综合来说,不管怎么定义都是在围绕着两个本质:函数在引用变量,这个变量将不会被销毁。

闭包的一个作用就是:我们能够通过闭包的方法来在外部访问到一个内部函数的变量

很多人在解释闭包的时候都会把子函数return出去以后在外部调用,其实无论在哪里调用,闭包都已经形成了,只要是函数嵌套函数,并且子函数引用了父函数的变量,(不论子函数有没有被调用,电脑培训认为这个用一种方法证明:在子函数内部打断点,在f12中观察闭包里的内容,已经出现了引用函数,这时候调用还没有被执行)这个时候闭包已经形成了。

楼主,我发觉你这代码问题太多了。你看:var p=""var x=document.password.pass.valueif (x==p) {

window.open(p+".html")——问题出在,这里p="",即便从表单中取值取到了x="",成立,也不可能打开你要的页面啊,这里绝对出错啊,因为找不到这么一个页面。因为p+".html"得出来的是一个字符串,p+".html"=“.html”,只有一个后缀名,并没有页面的名称,你怎么打开这个页面?结果1:什么都不输入,直接提交,绝对会报你找不到这个页面的错误。结果2:输入一个空格或者其他内容,就会d出“恭喜您,答错了,看来你的JS还得加强哦 ”这句话

}else{

alert("恭喜您,答错了,看来你的JS还得加强哦 !")

}解答如上:再强调下x=p后跳转到哪吧。如果你的代码写成这样:function PassConfirm() {

var p="myname"——给p一个值

var x=document.all.name.value

if (x==p) {

window.open(p+".html")

}else{

alert("恭喜您,答错了,看来你的JS还得加强哦 !")

}

}在文本框中输入myname后,提交,此时x被赋值x=myname,既然p=myname,x=myname,条件成立(x==p),进入window.open(p+".html")这行代码,打开的页面就叫myname.html(注:p="myname",p+".html"="myname"+"html",这叫连接字符串,连起来就=myname.html了)了。楼主要记住一点,这里是打开一个新页面,并不是跳转到另一个页面。

举个例子:

<div id="a" name="b"></div>

取值:

document.getElementsByname(name) 返回值是它的name值,也就是b。因为name值不唯一,所以在页面中它返回的也有可能是name值组成的一个集。

document.getElementById(ID)的返回值是它的id值,即a。id是唯一的,所以只返回一个,而且在js取值中多用的是取id值。

document.getElementsByTagName(Tagname)的返回值是它的标签名,即div。在页面中,标签名也不是独一无二的,因此返回值也能是一个集。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11586538.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存