1. 程式人生 > >js 的引數~~~以及傳參。

js 的引數~~~以及傳參。

      引數有兩種:一種是基本型別的(Undefined,Null,Boolean,Number,String),另一種是引用型別的(Object)這兩種引數傳遞的時候會有不一樣。

      基本型別很簡單。就是把值複製過去,然後裡面怎麼變化是裡面的事情,和原來有值的那個無關。

程式碼如下:

<!DOCTYPE html>
<html>
<head>
    <title>Function Arguments Example 1</title>
    <script type="text/javascript">
        function addTen(num) {
            num += 10;
            return num;
        }
        
        var count = 20;
        var result = addTen(count);
        alert(count);    //20
        alert(result);   //10

    </script>
</head>
<body>

</body>
</html>

解釋一下:

由於count作為引數傳進來了,所以它的值被複制了一份在num裡面。然後num怎麼變和count無關。count還是那個count。

翻譯成人話:

相當於是我在博物館影印了一幅蒙娜麗莎,一模一樣,然後不管是給複製品加相框,改顏色還是撕毀它,都和真貨沒關係,真貨還在博物館裡牆上掛著吶....

     引用型別的有點小複雜,但知道了原理其實也容易。

程式碼如下:

<!DOCTYPE html>
<html>
<head>
    <meta name="name" content="content" charset = "utf-8";>
    <title>小黃毛的傳參。</title>
    <script type="text/javascript">
      function setName(obj) {
            obj.name = "Nicholas";
            obj = new Object();
            obj.name = "Susan";
            console.log("我是函式裡面的"+obj.name);
            abc = 10;   
        }
        var person = new Object();
        setName(person);
        console.log(person.name);    //"Nicholas"
        console.log(abc);
        console.log("在外面呼叫obj試試~"+obj.name);
       
    </script>
</head>
<body>

</body>
</html>

顯示如下:


結果如上:

一、在函式setName之外,abc輸出10(藍色的3);obj is not defined(黑色的4)。

二、obj.name輸出結果為susan(紅色的1),person.name輸出結果為Nicholas(黃色的2)。

一的原因:

首先,obj是個區域性變數。

解釋一下:

1. function setName(obj){ }長這樣表示 obj是個引數。//傳聞中的形參

2.  function setName(obj){ } 等價於 function setName(obj) {var obj = null; } 

     所以,醬紫就註定了obj是個在函式setName裡面的區域性變數

~~2333~~小樣兒~(在小黃毛的認知範圍內,)你就永遠都是區域性變數啦~~

其次,abc是個全域性變數

解釋一下:

雖然在函式體裡,但是,定義的時候前面沒有var。所以預設為全域性變數。

綜上,結果很明確了。

在函式setName外面console.log();,這倆變數的結果就是全域性變數abc輸出10(藍色的3);區域性變數obj is not defined(黑色的4)。

二的原因:

var person = new Object();

這句話的意思其實是醬紫的.....開闢一個小地址,用 指標 指到物件object上。


所以,所謂的賦值,比如要把person作為引數傳到函式setName的引數obj 裡.....

就是下圖醬紫。


由於指向的是同一個object,所以,不管是obj還是person,修改了屬性以後對方的屬性都會保持最新的那個。

然後,下面的程式碼又做了這麼一件事:

obj = new Object();

在圖上就是醬紫:


在改了這句之後,person指向的一切與obj無關了~新世界來臨了~

一切都是新的~~

翻譯成人話就是:

person是個美國男人,setName()是個沒國籍的女人,她帶了一個孩子obj,也沒國籍。person和setName結婚了,他大方地說:讓obj隨我的國籍吧~然後person和obj就都成美國公民了,他們都有權利修改憲法,但是呢,管用的憲法只有一個版本,就是最新版本。

後來呢,obj長大了,經過考慮,他開心得決定加入中國國籍,所以,他指定中國法律的一切和美國男人無關~美國的法律也和他無關了~他只和中國法律有關。


瞭解了原理,回來看程式碼:

隨著函式的進行,obj做了這麼幾件事:

1.加了一個屬性:obj.name="Nicholas";//改了美國的憲法 object1的屬性

2.指向了一個新地址:new Object();//變成 了中國國籍 從指向object1變為指向object2

3.新地址裡添加了一個屬性 obj.name = "Susan";//改了中國憲法 即object2的屬性

所以,obj.name(指向object2)輸出結果為susan(紅色的1),person.name(指向object1)輸出結果為Nicholas(黃色的2)。

以上。

相關推薦

js引數~~~以及

      引數有兩種:一種是基本型別的(Undefined,Null,Boolean,Number,String),另一種是引用型別的(Object)這兩種引數傳遞的時候會有不一樣。       基本型別很簡單。就是把值複製過去,然後裡面怎麼變化是裡面的事情,和原

tp5 js;thinkphp5 js跳轉;thinkphp5 ajax返回引數跳轉

有的時候我們傳送ajax請求到後臺,然後返回一個動態的引數到url做跳轉,因為tp有專門的路由,直接將js帶入到tp路由去生成顯然不現實,這個時候只需要迂迴一下,先用tp自帶路由生成一個連線,然後再用js去替換即可 demo: $.post('{:url("home/me

js onclick事件

start var str class clas -c onclick spa edi 傳字符串參數 var html = "<a href=‘#‘ onclick=‘onedit(&quot;"+ row.name + "&quot;)‘;>

JS基礎之(值傳遞、對象傳遞)

rate ati 無效 over 並不是 undefined 字符 https cal 一、概念   我們需了解什麽是按值傳遞(call by value),什麽是按引用傳遞(call by reference)。在計算機科學裏,這個部分叫求值策略(Evaluation

js 獲取url

ref col js代碼 clas The mat indexof www. In js代碼: <Script language="javascript"> function GetRequest() { var url = locati

C++(筆記)容器(vector)作為函式引數如何

一、大致以下型別 void 函式名( vector< int> obj ); void 函式名( vector< int>* pobj ); void

Web前段——js獲取URL

超連結 <a href="demo.html?id=1"/> 獲取頁面的js function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*

解決:JS向後臺,IE下中文未編碼問題

1.問題描述    專案中用jQuery向後臺URL傳參獲取資料時,google瀏覽器正常執行,但IE沒有資料返回。js程式碼如下: jsonurl = urlPreffix +"getInfoByCity.do?city="+$j("#city").val(); $j.

微信小程式生成二維碼,並且進行

微信小程式生成二維碼第一步.首先我們需要去拿到Token值 第一步是一個比較常規的操作,未遇到大的問題。第二步.拿著Token進行換取二維碼    這一不是很關鍵的地方,騰訊用token換取二維碼的方法有三組介面A,B,C    我們推薦生成並使用小程式碼,它具有更好的辨識度

js函式動態

js函式體內可以通過arguments物件來接收傳遞進來的引數,利用這一物件屬性可以動態傳參。 function box() { return arguments[0]+' | '+arguments[1]; //得到每次引數的值 } alert(bo

thinkphp5 內建路由寫法 及 轉到 特定地址 以及的寫法 及修改功能讀庫 實現顯示

<script> function enterLicense() { location.href = '{:Url("admin/index/enterLicense")}'; } </script>傳參的寫法<a

Mybatis,模糊查詢語句,以及數的正確寫法

rec mapping rom cti turn ack ping tid col 不多說直接上代碼! 接口: public interface CommodityMapper { int deleteByPrimaryKey(Integer pr

android與網頁js互動 json格式問題

如果不進行格式轉換,安卓客戶端獲取到的引數內容是undefined 網上存在多種方法: 1)jQuery外掛支援的轉換方式 $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以將json字串轉換成json物件 2)

C#呼叫SQL Server引數過程

SQL SERVER生成測試環境: [sql] view plaincopyprint? Createdatabase Test;   go  USE [Test]  GO  if OBJECT_ID('Tab2','U') isnotnull    dropta

angular 路由跳轉以及

1 獲取在路由後面的引數 <a [routerLink]="['/list/nav','MALFUNCTION','WAITING']"></a>這種方式需要在路由配置像這樣:{ // 報修列表導航快捷欄 path: 'list/nav/:repa

a標籤跳頁以及擷取URL引數 js 中編碼(encode)和解碼(decode)的三種方法

<a href="dd.index?aa=1&&bb=2"></a> //擷取URL引數 // console.log(window.location.search); function GetQueryString(name) { var reg = new Re

JS 動態加載頁面以及ViewBag

textarea cti use pid -name play color com art <h2>JS 動態加載頁面以及ViewBag傳參</h2> 1 function setchildcomment(thisa, index){ 2

vue.js通過路由跳轉,重新整理頁面引數丟失

問題:vue.js路由跳轉,跳轉頁面重新整理後引數丟失,沒有資料,怎麼解決?? 出現的情況:從新聞列表頁面進入某一條新聞得詳情頁,需要在路由跳轉時給詳情頁面傳送該條新聞得ID,然後詳情頁獲取ID想後臺請求資料將內容展示,還有商品詳情頁等等~ 下面寫了一個小例子,是模擬專案的新聞列表和詳情頁,

vue-router中query和params(接收引數以及$router、$route的區別

  query傳參: this.$router.push({ path:'/...' query:{ id:id } }) 接收引數:this.$route.query.id params傳值: 傳參: this.$router.push({ name:'...' params:{ id:id

js頁面以及接收

A頁面:下面是要跳轉的url window.location.href = "mima2.html" + "?" + "phoneNumber=" + phoneNumber + "&" + "yzCode=" + yzCode B頁面:接收位址列傳