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裡面的區域性變數
其次,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(""+ row.name + "")‘;>
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頁面:接收位址列傳