zoukankan      html  css  js  c++  java
  • JavaScript基础 语言特性

    JavaScript是基于函数的语言,一切都是对象,但又比较特殊

    引用

    引用是指向实际对象的一个指针和C/C++的指针一样,C#和java的对象也是引用传递

    函数重载

    // A simple function for sending a message

    function sendMessage( msg, obj ) {

        // If both a message and an object are provided

        if ( arguments.length == 2 )

            // Send the message to the object

            obj.alert( msg );

        // Otherwise, assume that only a message was provided

        else

            // So just display the default error message

            alert( msg );

    }

    // Both of these function calls work

    sendMessage( "Hello, World!" );

    sendMessage( "How are you?", window );

    作用域

    作用域是由函数划分的,而不是块(Block)划分,和其他的语言不一样的地方

    // Set a global variable, foo, equal to test

    var foo = "test";

    // Within an if block

    if ( true ) {

        // Set foo equal to 'new test'

        // NOTE: This is still within the global scope!

        var foo = "new test";

    }

    // As we can see here, as foo is now equal to 'new test'

    alert( foo == "new test" );

    // Create a function that will modify the variable foo

    function test() {

        var foo = "old test";

    }

    // However, when called, 'foo' remains within the scope

    // of the function

    test();

    // Which is confirmed, as foo is still equal to 'new test'

    alert( foo == "new test" );

    JavaScript全局作用域就是window对象

    // A globally-scope variable, containing the string 'test'

    var test = "test";

    // You'll notice that our 'global' variable and the the

    // property of the the window object are identical

    alert( window.test == test );

    // A function in which the value of foo is set

    function test() {

        foo = "test";

    }

    // Call the function to set the value of foo

    test();

    // We see that foo is now globally scoped

    alert( window.foo == "test" );

    闭包

    闭包意味着内层的函数可以引用存在于包含它的函数内的变量,即使外层函数的执行已经终止

    详细参考:http://jibbering.com/faq/faq_notes/closures.html

    不用产生全局函数:

    // Create a new anonymous function, to use as a wrapper

    (function(){

        // The variable that would, normally, be global

        var msg = "Thanks for visiting!";

        // Binding a new function to a global object

        window.onunload = function(){

            // Which uses the 'hidden' variable

            alert( msg );

        };

    // Close off the anonymous function and execute it

    }());

    上下文

    this 这个功能在JavaScript中充分发挥

    var obj = {

        yes: function(){

            // this == obj

            this.val = true;

        },

        no: function(){

            this.val = false;

        }

    };

    // We see that there is no val property in the 'obj' object

    alert( obj.val == null );

    // We run the yes function and it changes the val property

    // associated with the 'obj' object

    obj.yes();

    alert( obj.val == true );

    // However, we now point window.no to the obj.no method and run it

    window.no = obj.no;

    window.no();

    // This results in the obj object staying the same (as the context was

    // switched to the window object)

    alert( obj.val == true );

    // and window val property getting updated.

    alert( window.val == false );

    以上处理有些不太同一理解,JavaScript提供了call和apply方法实现这个功能:

    // A simple that sets the color style of its context

    function changeColor( color ) {

        this.style.color = color;

    }

    // Calling it on the window object, which fails, since it doesn't

    // have a style object

    changeColor( "white" );

    // Find the element with an ID of main

    var main = document.getElementById("main");

    // Set its color to black, using the call method

    // The call method sets the context with the first argument

    // and passes all the other arguments as arguments to the function

    changeColor.call( main, "black" );

    // A function that sets the color on  the body element

    function setBodyColor() {

        // The apply method sets the context to the body element

        // with the first argument, the second argument is an array

        // of arguments that gets passed to the function

        changeColor.apply( document.body, arguments );

    }

    // Set the background color of the body to black

    setBodyColor( "black" );

  • 相关阅读:
    多个类定义attr属性重复的问题:Attribute "xxx" has already been defined
    好用的批量改名工具——文件批量改名工具V2.0 绿色版
    得到ImageView中drawable显示的区域的计算方法
    得到view坐标的各种方法
    实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置
    Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
    Android 自带图标库 android.R.drawable
    解决 Attempting to destroy the window while drawing!
    解决Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 4
    Material Designer的低版本兼容实现(四)—— ToolBar
  • 原文地址:https://www.cnblogs.com/2018/p/1838808.html
Copyright © 2011-2022 走看看