zoukankan      html  css  js  c++  java
  • Javascript 函数的两个基本原则

    Javascript 函数纷繁复杂,调用方式也是多种多样。但是,不是说其基本的规则就十分的复杂。
    当然,这些东西只是我个人的理解,用于帮助记忆。
    1. 原则1 : 函数名是只是变量,它的值表示一段代码。从C语言的角度来说,函数的名称只是一个地址指针。只是,这个指针式只读的。
    你完全可以定义自己的指针来调用函数。JavaScript 也是类似的。
    比如下面的代码:
      function alert(x)
      {
           document.write(x);
      }
      alert(alert);

    将在网页上打印:
    function alert(x) { document.write(x); }
    当然 alert 可以定义成:
    var alert = function(x)
    {
        document.write(x);
    }
    这个就是真正的变量了。
    可以看到,函数名只是一个变量而已。至少,在JavaScript 里面可以这样理解。所以也不要太多的区分匿名函数,普通函数。
    最重要的是,你要有个变量能访问到这段代码。

    2. 原则2: 函数的执行方式是这样的,(Code)(参数列表);  这里Code 就是 函数变量(变量的值是就是代码),或者直接就是一段Code。
    比如,下面的方式都是能运行的:
    alert("Hello!");
    (function(x)
    {
        document.write(x);
    })("hello");

    ,有人会问,可不可以省略第一个括号,变成:
    function(x)
    {
        document.write(x);
    }("hello");

    实际上,如果不加,也没用语法上的错误,只是,编译器把这个拆成两个表达式了

    function(x)
    {
        document.write(x);
    }

    和 ("hello");, 关于 (expression); 的意义,在后面讨论。

    有没有一种操作符,或者函数,让这个整体成为一个表达式呢(不加() 的情况下)?
    有, void 。
    void function(x)
    {
        document.write(x);
    }("hello");


    或者
    void 也可以作为一个函数
    void(
    function(x)
    {
        document.write(x);
    }("hello");
    );

    或者 void 可以省略
    (
    function(x)
    {
        document.write(x);
    }("hello");
    );

    都可以执行。

    实际上,只要是这个表达式,作为一个函数的参数,或者作为一个赋值表达式赋值给一个变量的时候,它会作为一个整体执行。

    再总结一下:
    1. 原则1 : 函数名是只是变量,它的值表示一段代码。
    2. 原则2:  函数的执行方式是这样的,(Code)(参数列表); 
    如果 Code 是  函数变量 , 如 alert ,而不是代码本身, 第一个 () 可以省略。
    如果 整个表达式 在 void 表达式里面,第一个() 也可以省略。
    如果 作为一个函数的参数,或者作为一个赋值表达式赋值给一个变量的时候,可以省略。

    下面来看一个函数:
    var toElement = function(){
     var div = document.createElement('div');
     return function(html){
      div.innerHTML = html;
      var el = div.childNodes[0];
      div.removeChild(el);
      return el;
     }
    }();

    第一步:
    定义一个函数:
    function(){
       .....
    }

    第二步:
    执行这个函数。因为闭包,有些局部变量保留在了匿名函数里面。

    第三步赋值:

    toElement  = function(html){
      div.innerHTML = html;
      var el = div.childNodes[0];
      div.removeChild(el);
      return el;
     }

    如果,懂以上的原则,大多数奇怪的js 表达式,应该都能看懂了。
  • 相关阅读:
    认识CSS样式/CSS样式的优势
    form表单中的label标签
    使用提交按钮,提交数据/使用重置按钮,重置表单信息
    使用下拉列表框,节省空间
    (七十)Xcode5及以上对于状态栏和导航栏样式的设定方法
    (六十九)使用block进行消息传递
    1039. Course List for Student (25)
    (六十八)使用XMPPFramework登录
    (六十七)Xcode导入XMPPFramework框架
    (六十六)TableView内容超过一屏时滚动到屏幕底部的方法
  • 原文地址:https://www.cnblogs.com/niniwzw/p/1556765.html
Copyright © 2011-2022 走看看