所以我正在尝试用JS编写一个数据结构可视化工具(以便我可以在线托管它(。似乎我的JS忽略了我的变量(并声称某些函数不存在(,我无法弄清楚原因。我将不胜感激你的帮助。
var stack = new Stack();
var defaultValueCounter = 0;
function push() {
var value = document.getElementById("add").value;
if (value === "") {
defaultValueCounter++;
value = defaultValueCounter;
}
//console.log(stack + ", " + value)
stack.push(value);
addCol(value);
stack.print();
document.getElementById("add").value = "";
}
在该代码中,由于某种原因,它似乎忽略了堆栈(初始化为未定义(。我已经通过将声明移动到 push(( 函数中来测试这个假设,并且它有效(尽管出于显而易见的原因,我的 Stack 只能包含 1 个元素(。我能做些什么来修复它
编辑: 分享我的堆栈实现
function Node() {
this.value;
this.next ;
}
var Stack= function(){
this.head;
}
Node.prototype.insert=function(value) {
var current = this;
if (current.value === undefined) { //has nothing yet
current.value = value; //insert here
return;
}
if(current.next === undefined) { //completely null
current.next = new Node();//want new node
}
var c = current.next;
c.insert(value);
}
Stack.prototype.push= function(value) {
if(value==undefined || value==""){
throw "Please input proper value (number)"
}
if(this.head==undefined){//nothing exists yet
this.head=new Node();
this.head.value=value;
}else{//nonempty stack
var c=this.head;
c.next=new Node();
c.next=this.head;
c.value=value;
this.head=c;
}
}
Stack.prototype.top= function() {
if(this.head==undefined){//nothing exists yet
throw "Trying to get top of null"
}else{//nonempty stack
return this.head.value;
}
}
Stack.prototype.pop= function() {
if(this.head==undefined){//nothing exists yet
throw "Trying to get top of null"
}else{//nonempty stack
var val=this.head.value;
this.head=this.head.next;
return val;
}
}
Stack.prototype.print= function(){
//debugging purposes
var c=new Node();
c.value=this.head.value
c.next=this.head.next
while(c.value!=undefined){
console.log(c.value)
c=c.next
}
console.log("Head: "+ this.value)
}
编辑:代码似乎没有在开始时初始化堆栈。我该怎么做才能解决这个问题?
出于某种原因,我通过删除 top(( 解决了所有问题。不知道为什么。将进一步调查我的代码
您可能需要使用
function Stack() {
而不是
var Stack = function() {
当函数定义被提升时,其中仅作为 var 声明,而不是 var 定义被提升
这就解释了为什么Stack
undefined
此外,您的非空堆栈代码应该是
}else{//nonempty stack
var c=new Node;
c.next = this.head;
c.value=value;
this.head=c;
}
您的范围有问题。stack
在函数外部声明,而不是传递给函数。因此,当您尝试访问它时,它是undefined
的。
若要解决此问题,请确保方法push()
通过使变量对函数可见来对stack
变量进行操作。