您的位置:首页 > 运维架构 > Tomcat

js函数表达式与函数声明的区别以及mac环境下远程调试tomcat

2017-12-24 17:48 369 查看

第三周实习总结

不知不觉,在公司已经三周了,这三周下来无论在工作还是生活上,都有很多感受和收获,在自身能力以及修养素质方面也取得了很大的进步,从经历的每件事中去总结工作经验,学习并适应工作环境。本人因为是mac系统,之前在mac上装了个win10,想着就用Windows系统,毕竟自己比较熟悉,可是最近发现在mac下装的win10并不是很好用,比如当我装oracle11g、mysql时总是会报一些奇怪的错误,自己在网上也找了好多解决方法至今都没有解决,所以一气之下决定还是使用mac系统。所以这一周基本都在使新的环境来重新学习一下,我觉得多学一点并不是什么坏事,以后或许也会用上。那先来总结一下这一周所学的内容:

由于上一周学习了有关js的部分,这一周也花了一些时间进行复习了一下,发现自己还有一些点并没有彻底搞清楚,js中函数的声明以及函数表达式。javascript中函数的创建一般有三种:

1.1函数声明:

//这是有函数名的声明:可以定义命名的函数变量,而无需给变量赋值
function sum(a,b){
return a+b;
}


1.2函数表达式

//下面为函数表达式
var sum1=function sum(n1,n2){
return n1+n2;
};


//这里函数也可以是匿名的
var sum2=function (n1,n2){
return n1+n2;
};


如果使用函数表达式时需要注意,看下面的例子:

//此时可以发现f只能在函数内部使用,使用场景:函数的递归
var fac = function f(num) {
if(num <= 1) {
return 1;
} else {
return num * f(num - 1);
}
}

//如果函数外部想调用f函数,只能用fac(参数)

fac(3)//求三的阶乘


函数表达式还可以实现只向外部提供接口,具体实现可以隐藏

var person=(function(){
var name="";
return {
getName:function(){
return name;
},
setName:function(newname){
name=newname;
return "success";
}
};
}());
//外部可以使用person来调用其中方法,而调用者并不需要了解内部怎么实现的
person.setName("zuo");
person.getName();


我们常见到的自执行函数严格来说也叫函数表达式,它主要用于创建一个新的作用域,在此作用域内声明的变量,不会和其它作用域内的变量冲突或混淆,大多是以匿名函数方式存在,且立即自动执行。

(function(x,y){
console.log(x+y);
})(2,3);


这里也需要有几个地方需要注意:

//这里的bobo是3,因为后面是一个立即执行函数,所以函数会执行将返回值赋给bobo
var bobo = (function() {
return 3;
}());

//而这里bobo1是后面的那个函数的引用,这里需要严格区分
var bobo1 = function() {
return 3;
};


那么函数表达式与函数的声明有什么区别呢?

答:解析器会先读取函数声明,并使其在执行任何代码之前可以访问;而函数表达式则必须等到解析器执行到它所在的代码行才会真正被解释执行。

1.3函数构造法,参数必须加引号

var sum3=new Function('n1','n2','return n1+n2');
console.log(sum3(2,3));//5


2.之前针对Windows系统下使用eclipse来远程调试tomcat,那么今天就来谈谈mac/linux系统下怎么做?

2.1、在网上看了好多方法都是需要改什么catalina.sh文件什么的。其实tomcat服务器已经内置了JPDA支持,只要用:./catalina.sh jpda start这条命令启动tomcat,它就会监听8000端口,等待调试器的连接。要注意不能使用startup.sh脚本。tomcat会使用 JPDA_ADDRESS这个环境变量的值。配置可以在catalina.sh这个文件中进行修改。

参数说明:

-Xdebug : 启用调试模式

-Xrunjdwp : 加载JVM的JPDA参考实现库

transport=dt_socket : Socket连接,可选dt_shmem 通过共享内存的方式连接到调试服务器

address=8000 :调试服务器监听的端口

server=y : 是否是服务器端,n为客户端

suspend=n : 启动过程是否加载暂停,y为启动时暂停,方便调试启动过程

2.2、启动tomcat,看看tomcat是否启动成功,

如果启动成功,tomcat日志文件(catalina.out)中会有如下输出:

Listening for transport dt_socket at address: 8000

2.3、在eclipse中选择“Debug Configurations”。在对话框里找到“Remote Java Application”。 右键菜单选择“New”创建一个配置。新创建的配置的Project选择服务器上的工程。Host和Port分别填写你服务器的IP和JPDA的端口,默认是8000,或者$JPDA_ADDRESS。(必须在show view里打开debug窗口,不然会发现没效果)现在就可以像本机调试一样, 设置断点和跟踪调试了。

注意:本地代码必须与服务器代码一致,否则调试结果不一致。

3.在mac环境下scrat的使用

3.1首先去官网下载相对应的node.js版本进行安装

3.2node安装完成后使用”npm install -g scrat” 命令安装scrat.(这里需要使用root用户进行安装,否则会提示权限不够)

3.3这时就可使用scrat了。

3.4在命令行将目录切换到测试项目目录,使用”scrat release”命令编译项目,编译完成后使用scrat server start启动项目。

3.5在命令行将目录切换到测试项目目录后使用”scrat release –wL”命令将启动热发布功能,在修改文件后将自动编译并刷新浏览器页面.

好了,上面就是这一周遇到的比较棘手的问题,希望能帮助到大家,自己有记不得的地方也可以经常看看!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: