<html lang="en">
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
function Stack(){
//栈中的属性
this.items=[]
// 栈的相关操作
// 1.将元素压入栈,两种方法!第二种方法好啊!,第一种方法是对某个实例添加了方法,第二种方法是对某个类添加了方法!共享!
// this.push=function (){}
Stack.prototype.push= (element)=>{
this.items.push(element)
}
// 2.将栈中的元素取出来
Stack.prototype.pop=()=>{
return this.items.pop()
}
// 3.查看栈中的元素
Stack.prototype.peek=()=>{
return this.items[this.items.length-1]
}
// 4.判断栈是否空
Stack.prototype.isEmpty=()=>{
return this.items.length===0
}
// 5.获取栈中元素的个数
Stack.prototype.size=()=>{
return this.items.length
}
// 6.toString的方法
Stack.prototype.toString=()=>{
// 20 10 12 8 7
let resultString=''
for (let i=0i
resultString +=this.items[i]+' '
}
return resultString
}
}
// 栈的使用
// 验证!
let s=new Stack()
s.push(20)
s.push(10)
s.push(100)
s.push(77)
alert(s)
s.pop()
s.pop()
alert(s)
alert(s.peek())
alert(s.isEmpty())
alert(s.size())
</html>
结果显示:
成功实现!
首先,你给出的这个函数 是个严重有缺陷的调用,他会无限递归最终内存溢出,其次 你这段代码是要运行在什么地方,如果运行在浏览器中,不同浏览器解析到这段代码都会主动报错,不会调用,如果你运行在node环境,这段代码运行会依照你物理内存大小 和系统内存分配方法进行调用 最终爆掉,很显然,你的问题没有完整的条件
记录这个调用也很简单,在函数外部声明一个变量 并且赋值为0;并且在调用的时候给这个变量做自增操作,最后的数据就是完成调用到溢出的调用次数。
关于内存结构,假设一个 数据类型是整数,8字节 ,这句话本身就是个问题,首先Var A = 1这是声明了一个 类型为整数的 变量,这个时候 他在栈中声明了一个东西叫A 同时 指向了池的1 所以 这个8字节代表了2部分,他的栈空间占用就是最终调用函数的次数;不管是什么数据类型,变了的声明都是在栈中,数据都在池里面。如果只是声明了 var A 但是并不赋值,此时他在内存结构中 只会占用栈空间,但是没有数据类型;跟没有整数,字符串,数组,对象,undiluted,这样的数据类型之分了。
我个人觉得,这要么是一个非常刁钻的考试题,要么就是不知道谁脑子有毛病想出来的,显然这是一个非常不科学的题目,实际情况程序是根本跑不起来的,