我正在尝试优化某些东西。我的剧本:
function d1() {
for (i = 0; i < 1; i++) {
d1();
}
Logger.log("DONE!");
}
function d2() {
for (i = 1; i < 2; i++)
Logger.log("IN PROGRESS...");
}
此脚本永远不会完成!但如果我改为
function d1() {
for (i = 0; i < 1; i++) {
for (i = 1; i < 2; i++)
Logger.log("IN PROGRESS...");
}
Logger.log("DONE!");
}
一切都很完美!我的问题是什么?
哦,我很蠢。当然我叫d2()。
我的剧本完全不同,我试图简化,但我想我最好发送原文,我希望它会很清楚。
projects.gs
function ViewNewProjects() {
var app = UiApp.getActiveApplication();
var wait = app.getElementById("wait");
wait.setStyleAttribute("display","none");
var spreadsheet = SpreadsheetApp.openById("0AnYzxNSJL2u_dDVETm9JNVAxQ3BESmdoNGZnc1JDN2c");
var sheet = spreadsheet.getSheetByName("Заявки Технического Отдела");
var data = app.getElementById("Data_Panel");
var range = sheet.getDataRange();
var values = range.getValues();
var bg = true;
data.clear();
for (i=2; i<values.length; i++) {
var row = app.createHorizontalPanel();
var techSpec = app.createHTML(values[i][4]);
var status = app.createHTML(values[i][11]);
if (values[i][4].length == 0 && values[i][12] != "Закрыт") {
var projectLabel = app.createHTML(values[i][0] + ", " + values[i][2]);
var typeLabel = app.createHTML(values[i][1]);
var postLabel = app.createHTML(values[i][5]);
var startDateLabel = app.createHTML(values[i][6]);
**var expDateLabel = app.createHTML(EstimateData(values[i][7]));**
var buttonGet = app.createButton("Взять проект");
var getProject = app.createServerHandler("ViewProject");
var ShowWait = app.createServerHandler("ShowWait");
projectLabel.setId("project_id_" + i);
projectLabel.addClickHandler(ShowWait);
projectLabel.addClickHandler(getProject);
row.setWidth("100%");
projectLabel.setStyleAttribute("margin", "3");
projectLabel.setStyleAttribute("padding", "10px");
typeLabel.setStyleAttribute("margin", "3");
typeLabel.setStyleAttribute("padding", "10px");
postLabel.setStyleAttribute("margin", "3");
postLabel.setStyleAttribute("padding", "10px");
startDateLabel.setStyleAttribute("margin", "3");
startDateLabel.setStyleAttribute("padding", "10px");
expDateLabel.setStyleAttribute("margin", "3");
expDateLabel.setStyleAttribute("padding", "10px");
if (bg == true) {
projectLabel.setStyleAttribute("background-color", "#e9e9e9");
typeLabel.setStyleAttribute("background-color", "#e9e9e9");
postLabel.setStyleAttribute("background-color", "#e9e9e9");
startDateLabel.setStyleAttribute("background-color", "#e9e9e9");
expDateLabel.setStyleAttribute("background-color", "#e9e9e9");
bg = false;
} else {
projectLabel.setStyleAttribute("background-color", "#f9f9f9");
typeLabel.setStyleAttribute("background-color", "#f9f9f9");
postLabel.setStyleAttribute("background-color", "#f9f9f9");
startDateLabel.setStyleAttribute("background-color", "#f9f9f9");
expDateLabel.setStyleAttribute("background-color", "#f9f9f9");
bg = true;
}
projectLabel.setStyleAttribute("cursor", "pointer");
projectLabel.setStyleAttribute("color", "blue");
projectLabel.setStyleAttribute("text-decoration", "underline");
row.add(projectLabel)
.add(typeLabel)
.add(postLabel)
.add(startDateLabel)
.add(expDateLabel)
.add(buttonGet);
row.setCellHorizontalAlignment(projectLabel, UiApp.HorizontalAlignment.LEFT);
row.setCellVerticalAlignment(projectLabel, UiApp.VerticalAlignment.MIDDLE);
row.setCellWidth(projectLabel, "320px");
row.setCellHorizontalAlignment(typeLabel, UiApp.HorizontalAlignment.CENTER);
row.setCellVerticalAlignment(typeLabel, UiApp.VerticalAlignment.MIDDLE);
row.setCellWidth(typeLabel, "120px");
row.setCellHorizontalAlignment(postLabel, UiApp.HorizontalAlignment.CENTER);
row.setCellVerticalAlignment(postLabel, UiApp.VerticalAlignment.MIDDLE);
row.setCellWidth(postLabel, "200px");
row.setCellHorizontalAlignment(startDateLabel, UiApp.HorizontalAlignment.CENTER);
row.setCellVerticalAlignment(startDateLabel, UiApp.VerticalAlignment.MIDDLE);
row.setCellWidth(startDateLabel, "80px");
row.setCellHorizontalAlignment(expDateLabel, UiApp.HorizontalAlignment.CENTER);
row.setCellVerticalAlignment(expDateLabel, UiApp.VerticalAlignment.MIDDLE);
row.setCellWidth(expDateLabel, "80px");
row.setCellHorizontalAlignment(buttonGet, UiApp.HorizontalAlignment.CENTER);
row.setCellVerticalAlignment(buttonGet, UiApp.VerticalAlignment.MIDDLE);
data.add(row);
}
}
return app;
};
holidays.gs
function EstimateData(date_to_estimate) {
var date = new Date();
var count = 0;
var mounth = new String(date.getMonth() + 1);
var day = new String(date.getDate());
var year = new String(date.getFullYear());
if (mounth < 10)
mounth = new String("0" + mounth);
var current_date = year + mounth + day;
var ___date_to_estimate = new String(date_to_estimate);
var date_to_estimate_array = ___date_to_estimate.match(/(\d+)\.(\d+)\.(\d+)/);
var ___date_to_estimate = date_to_estimate_array[3] + date_to_estimate_array[2] + date_to_estimate_array[1];
current_date = Number(current_date);
___date_to_estimate = Number(___date_to_estimate);
if (current_date > ___date_to_estimate) {
Logger.log("Текущая дата больше рассчитываемой");
var difference = Number(current_date - ___date_to_estimate);
Logger.log("Разница " + difference);
if (difference == 0) {
return date_to_estimate;
} else if (difference < 31) {
var weekday = date.getDay();
Logger.log("День недели " + weekday);
for (i = 1; i < difference; i++) {
if (weekday == 7)
weekday = 0;
if (weekday > 0 && weekday < 6) {
count++;
}
weekday++;
}
} else if (difference < 1130) {
} else {
}
} else if (current_date == ___date_to_estimate) {
date_to_estimate = '<b>Сегодня!!!</b>';
} else {
}
Logger.log("Количество рабочих дней " + count);
return date_to_estimate;
}
在写信息和测试时,我发现了我的错误。
在project.gs中的循环包含变量i 在holadays.gs中的循环包含varialble我也是
我改变了变量,没关系!
答案 0 :(得分:1)
您有无限递归,因为您在d1()
内调用d1()
for循环。
你的第一个功能应该是
function d1() {
for (i = 0; i < 1; i++) {
d2();
}
Logger.log("DONE!");
}