分类 其它 下的文章

查看防火墙某个端口是否开放
firewall-cmd --query-port=80/tcp

开放防火墙端口80
firewall-cmd --zone=public --add-port=80/tcp --permanent

关闭80端口

firewall-cmd --zone=public --remove-port=80/tcp --permanent  

配置立即生效firewall-cmd --reload 

查看防火墙状态
systemctl status firewalld

关闭防火墙
systemctl stop firewalld

打开防火墙
systemctl start firewalld

开放一段端口
firewall-cmd --zone=public --add-port=8121-8124/tcp --permanent

查看开放的端口列表
firewall-cmd --zone=public --list-ports

firewall-cmd --zone=public --add-port=80/tcp --permanent


1、首先查找端口,会显示出所有的端口,比如说要找到端口为“8080”的PID

netstat -ano


2、还可以精确查找

netstat -aon|findstr "8080"


3、关闭对应的端口

taskkill /t /f /pid "9608"

4、使用任务管理器关闭

查看详细信息,根据查找到的pid找到对应的程序进行,结束任务


OK


在JavaScript中,有两种方式可以定义一个函数,一个是函数声明,一个是函数表达式。

一 函数声明

函数声明的语法如下:

function functionName(arg0, arg1, arg2) { //函数体}

函数声明的最重要的一个特征是函数声明提升,意思是在执行代码之前会先读取函数声明,所以函数声明可以放在调用函数语句之后。

sayHello();function sayHello(){    console.log("Hello");}


上述代码可以正常执行,不会报错。

二 函数表达式

函数表达式的语法形式如下:

var functionName = function(arg0, arg1, arg2) {    //函数体}

这种形式看起来像常规的变量赋值,先创建一个匿名函数,然后赋值给变量functionName。我们知道在JS中如果要想使用一个变量,必须先给这个变量赋值,所以函数表达式也不例外,在调用之前,必须先给它赋值。否则会报错。

sayHi(); //在这里调用会报错var sayHi = function(){console.log("Hi");}sayHi(); //Hi


函数声明和函数表达式都是用来定义一个函数的,区别就是函数声明存在函数声明,可以在声明前调用。而函数表达式则必须在赋值语句之后再调用。


1. 函数声明提升

func()function func () {}

上例不会报错,正是因为 ‘函数声明提升’,即将函数声明提升(整体)到作用域顶部(注意是函数声明,不包括函数表达式),实际提升后结果同下:

// 函数声明提升function func () {}func()

2. 变量声明提升(只有var声明的变量才有变量提升,let、const无;变量赋值无提升)

1. console.log(num) var num = 102. console.log(func) var func = function () { }

上两例均会打印出 'undefined',变量声明提升会将变量声明提升到作用域顶部,但只会提升声明部分,不会提升赋值部分,实际提升后结果如下:

1. var num console.log(num) num = 102. var func console.log(func) func = function () { }

3. 进阶举例(两者优先顺序、局部与全局变量):

var func = 10console.log(func && typeof(func))function func () {}-----console.log(func && typeof(func))function func () {}var func = 10

上两例将分别输出 ‘number’、'function',原因是 函数声明提升优先于变量提升,函数声明会被变量赋值影响,但不会被变量声明影响,实际提升后结果如下:

function func () {}var func = 10console.log(func && typeof(func))-----function func () {}var funcconsole.log(func && typeof(func))func = 10

    ②

num = 10function func () { window.num = 5 console.log(num) var num console.log(window.num)}func()

上例将会分别打印出 'undefined'、'5',第一处为局部变量,第二处为全局变量,实际提升后结果如下:

function func () { var num window.num = 5 console.log(num) console.log(window.num)}var numnum = 10func()


C语言代码由上到下依次执行,原则上函数定义要出现在函数调用之前,否则就会报错。但在实际开发中,经常会在函数定义之前使用它们,这个时候就需要提前声明。

函数声明(Declaration),就是告诉编译器我要使用这个函数,你现在没有找到它的定义不要紧,请不要报错,稍后我会把定义补上。

函数声明的格式非常简单,相当于去掉函数定义中的函数体,并在最后加上分号;,如下所示:

dataType functionName( dataType1 param1, dataType2 param2 ... );

也可以不写形参,只写数据类型:

dataType functionName( dataType1, dataType2 ... );

函数声明给出了函数名、返回值类型、参数列表(重点是参数类型)等与该函数有关的信息,称为函数原型(Function Prototype)。函数原型的作用是告诉编译器与该函数有关的信息,让编译器知道函数的存在,以及存在的形式,即使函数暂时没有定义,编译器也知道如何使用它。

有了函数声明,函数定义就可以出现在任何地方了,甚至是其他文件、静态链接库、动态链接库等。

实例1 定义一个函数 sum(),计算从 m 加到 n 的和,并将 sum() 的定义放到 main() 后面。

#include <stdio.h>//函数声明int sum(int m, int n); //也可以写作int sum(int, int);int main(){ int begin = 5, end = 86; int result = sum(begin, end); printf("The sum from %d to %d is %d\n", begin, end, result); return 0;}//函数定义int sum(int m, int n){ int i, sum=0; for(i=m; i<=n; i++){ sum+=i; } return sum;}

在 main() 函数中调用了 sum() 函数,编译器在它前面虽然没有发现函数定义,但是发现了函数声明,这样编译器就知道函数怎么使用了,至于函数体到底是什么,暂时可以不用操心,后续再把函数体补上就行。

实例2 定义两个函数,计算1! + 2! + 3! + … + (n-1)! + n!的和。

#include <stdio.h>// 函数声明部分long factorial(int n); //也可以写作 long factorial(int);long sum(long n); //也可以写作 long sum(long);int main(){ printf("1!+2!+...+9!+10! = %ld\n", sum(10)); return 0;}//函数定义部分//求阶乘long factorial(int n){ int i; long result=1; for(i=1; i<=n; i++){ result *= i; } return result;}// 求累加的和long sum(long n){ int i; long result = 0; for(i=1; i<=n; i++){ result += factorial(i); } return result;}

运行结果:

1!+2!+...+9!+10! = 4037913

对于单个源文件的程序,通常是将函数定义放到 main() 的后面,将函数声明放到 main() 的前面,这样就使得代码结构清晰明了,主次分明。

将函数定义放在最后,就是尽量屏蔽不重要的信息,凸显关键的信息。将函数声明放到 main() 的前面,在定义函数时也不用关注它们的调用顺序了,哪个函数先定义,哪个函数后定义,都无所谓了。

对于多个文件的程序,通常是将函数定义放到源文件(.c文件)中,将函数的声明放到头文件(.h文件)中,使用函数时引入对应的头文件就可以,编译器会在链接阶段找到函数体。

在使用 printf()、puts()、scanf() 等函数时引入了 stdio.h 头文件,我们认为 stdio.h 中包含了函数定义(也就是函数体),只要有了头文件就能运行,其实不然,头文件中包含的都是函数声明,而不是函数定义,函数定义都放在了其它的源文件中,这些源文件已经提前编译好了,并以动态链接库或者静态链接库的形式存在,只有头文件没有系统库的话,在链接阶段就会报错,程序根本不能运行。

除了函数,变量也有定义和声明之分。实际开发过程中,变量定义需要放在源文件(.c文件)中,变量声明需要放在头文件(.h文件)中,在链接程序时会将它们对应起来。

扫一扫获取更多精彩内容哟!!!