Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
質上來講,request請求當中的參數是無法更改的,也不能添加或者刪除;
但在后臺程序中,一般對request的參數的操作,都是通過request的getParameter、getParameterNames、getParameterValues等方法執行的;所以我們要是能重寫這些方法,就從側面改變了request的請求參數。恰好,servlet就提供了一個HttpServletRequestWrapper類來供大家去繼承(該類是HttpServletRequest的封裝類,public class HttpServletRequestWrapper extends ServletRequestWrapper implements
HttpServletRequest{}),重寫request相關方法。
如果想學習Java工程化、高性能及分布式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135,群里有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。
JavaScript 函數對參數的值沒有進行任何的檢查。
函數顯式參數(Parameters)與隱式參數(Arguments)
在先前的教程中,我們已經學習了函數的顯式參數:
functionName(parameter1, parameter2, parameter3) {
// 要執行的代碼……
}
函數顯式參數在函數定義時列出。
函數隱式參數在函數調用時傳遞給函數真正的值。
參數規則
JavaScript 函數定義時顯示參數沒有指定數據類型。
JavaScript 函數對隱式參數沒有進行類型檢測。
JavaScript 函數對隱式參數的個數沒有進行檢測。
默認參數
如果函數在調用時未提供隱式參數,參數會默認設置為: undefined
有時這是可以接受的,但是建議最好為參數設置一個默認值:
實例
function myFunction(x, y) {
if (y===undefined) {
y=0;
}
}
或者,更簡單的方式:
實例
function myFunction(x, y) {
y=y || 0;
}
如果y已經定義 , y || 返回 y, 因為 y 是 true, 否則返回 0, 因為 undefined 為 false。 |
如果函數調用時設置了過多的參數,參數將無法被引用,因為無法找到對應的參數名。 只能使用 arguments 對象來調用。
Arguments 對象
JavaScript 函數有個內置的對象 arguments 對象。
argument 對象包含了函數調用的參數數組。
通過這種方式你可以很方便的找到最后一個參數的值:
實例
x=findMax(1, 123, 500, 115, 44, 88);
function findMax() {
var i, max=0;
for (i=0; i < arguments.length; i++) {
if (arguments[i] > max) {
max=arguments[i];
}
}
return max;
}
或者創建一個函數用來統計所有數值的和:
實例
x=sumAll(1, 123, 500, 115, 44, 88);
function sumAll() {
var i, sum=0;
for (i=0; i < arguments.length; i++) {
sum +=arguments[i];
}
return sum;
}
通過值傳遞參數
在函數中調用的參數是函數的隱式參數。
JavaScript 隱式參數通過值來傳遞:函數僅僅只是獲取值。
如果函數修改參數的值,不會修改顯式參數的初始值(在函數外定義)。
隱式參數的改變在函數外是不可見的。
通過對象傳遞參數
在JavaScript中,可以引用對象的值。
因此我們在函數內部修改對象的屬性就會修改其初始的值。
修改對象屬性可作用于函數外部(全局變量)。
修改對象屬性在函數外是可見的。
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
由于js中存在復雜類型和基本類型,對于基本類型??,是按值傳遞的。
var a=1;
function test(x) {
x=10;
console.log(x);
}
test(a); // 10
console.log(a); // 1
雖然在函數 test 中 a 被修改,并沒有有影響到 外部 a 的值,基本類型是按值傳遞的
我們將外部 a 作為?個對象傳? test 函數
var a={
a: 1,
b: 2
};
function test(x) {
x.a=10;
console.log(x);
}
test(a); // { a: 10, b: 2 }
console.log(a); // { a: 10, b: 2 }
可以看到,在函數體內被修改的 a 對象也同時影響到了外部的 a 對象,可?復雜類型是按引?傳遞的.
可是如果再做?個實驗:
var a={
a: 1,
b: 2
};
function test(x) {
x=10;
console.log(x);
}
test(a); // 10
console.log(a); // { a: 1, b: 2 }
外部的 a 并沒有被修改,如果是按引?傳遞的話,由于共享同?個堆內存, a 在外部也會表現為 10 才對. 此時的復雜類型同時表現出了按值傳遞和按引?傳遞的特性。
復雜類型之所以會產?這種特性,原因就是在傳遞過程中,對象 a 先產?了?個 副本a ,這個 副本a 并不是深克隆得到的 副本a , 副本a 地址同樣指向對象 a 指向的堆內存。因此在函數體中修改 x=10 只是修改了 副本a , a 對象沒有變化. 但是如果修改了 x.a=10 是修改了兩者指向的同?堆內存,此時對象 a 也會受到影響。
有?講這種特性叫做傳遞引?,也有?種說法叫做按共享傳遞。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。