js脚本中注释,声明,函数声明和函数表达式的区别是怎么表示的

js中函数声明与函数表达式
转载 &更新时间:日 11:09:59 & 投稿:hebedich
js的解析器对函数声明与函数表达式并不是一视同仁地对待的。对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,
目前为止,我们一直没有对函数声明和函数表达式加以区别。而实际上,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。如下例子:
alert(sum(10,10));
function sum(num1,num2)
&&& return num1+num2;
  以上代码完全可以正确执行,因为在代码开始执行之前,解析器就已经通过一个名为函数声明提升(function declaration hoisting)的过程,读取并将函数声明添加到执行环境中。对代码求值时,JavaScript引擎在第一遍会声明函数并将它们放到源代码树的顶部。所以,即使声明函数的代码在调用它的代码后面,JavaScript引擎也能把函数声明提升到顶部。如果像下面的例子所示,把上面的函数声明改为等价的函数表达式,就会在执行的时候出现错误。
alert(sum(10,10));
var sum=function(num1,num2)
&&& return num1+num2;
  以上代码会在运行的时候出现错误,原因在于函数位于一个初始化语句中,而不是一个函数声明。换句话讲,在执行到函数所在的语句之前,变量sum中不会保存有对函数的引用;而且,由于第一行代码就会导致“unexpected identifier”(意外标识符)错误,实际上也不会执行到下一行。
  除了声明时候可以通过变量访问函数这一点区别之外,函数声明与函数表达式的语法其实是等价的。
  注:也可以同时调用函数声明和函数表达式,例如 var sum=function sum(){}。不过,这种语法在Safari中会导致错误。
以上所述就是本文的全部内容了,希望对大家学习javascript能够有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具版本号:sys702
业务场景(如下):
主表的可以通过f($('#TableLayoutPanel1 :text[data-bind*=&ROBXDJ_SFJE&]').attr('data-bind').search(/cal:/) & 0) 获取,子表字段呢?
预期效果(如下):
实际效果(如下)(包括错误,异常):
操作步骤(如下):
未采纳答案
获取计算表达式做什么?
多试几次就可以了删除javascript中注释语句的正则表达式
&更新时间:日 11:26:33 & 作者:
这篇文章主要介绍了删除javascript中注释语句的正则表达式,需要的朋友可以参考下
代码如下:function removeJsComments(code)&& {&&&& &&& return code.replace(/(?:^|\n|\r)\s*\/\*[\s\S]*?\*\/\s*(?:\r|\n|$)/g, '\n').replace(/(?:^|\n|\r)\s*\/\/.*(?:\r|\n|$)/g, '\n');& }
多行注释: 代码如下:/(?:^|\n|\r)\s*\/\*[\s\S]*?\*\/\s*(?:\r|\n|$)/g
单行注释: 代码如下:/(?:^|\n|\r)\s*\/\/.*(?:\r|\n|$)/g
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具博客分类:
public static void main(String[] args) {
String str = readFile(new File("D:\\workspace\\izbra_front\\WebRoot\\aa\\aa.java"));
// 先过滤 script 标签
String reg_tag = "&[\\s]*?#t#[^&]*?&[\\s\\S]*?&[\\s]*?\\/[\\s]*?#t#[\\s]*?&".replace("#t#", "script");
str = Pattern.compile(reg_tag,Pattern.CASE_INSENSITIVE).matcher(str).replaceAll("");
// 再 过滤 hmtl 标签
reg_tag = "&[^&]+&";
reg_tag = "&[\\s\\S]*?&";
str = Pattern.compile(reg_tag,Pattern.CASE_INSENSITIVE).matcher(str).replaceAll("");
str = str.replaceAll(" ", "");
str = str.replaceAll("\n{1,}", "#");
str = str.startsWith("#") ? str.substring(1) :
str = str.endsWith("#") ? str.substring(0, str.length() - 1) :
System.out.println("数量=="+str.split("#").length);
str = str.replaceAll("#", "\n");
System.out.println(str);
public static String readFile(File file){
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
String line =
while((line = br.readLine()) != null){
if("添加".equals(line))
sb.append(line+"\n");
br.close();
} catch (Exception e) {
e.printStackTrace();
return sb.toString();
浏览: 5523 次
来自: 北京
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 函数声明和函数表达式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信